问下·TX-51单片机中数码管显示如何移位,比如说我按键1在第6个根数码管上显示1。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-30
单片机 51 利用数码管1显示按键1的被按次数,按第10次时数码管显示归零,重新显示。

1、在主程序中一直扫描显示程序
2、通过按键触发中断 在中断里面进行计数
3、每有一次中断触发 计数指针加一
4、加够10次后指针恢复初始状态 即清零

程序清单如下:
#include // 51单片机头文件
#define uchar unsigned char// 宏定义,用uchar替代无符号字符型
#define uint unsigned int// 宏定义,用uint 替代无符号整数型
sbit Key = P2 ^ 7;
uchar Count = 0;
uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};//延时N毫秒
void DelayNms( uint N )// 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的
{
uint x,y;
for( x=N; x>0; x-- )
for( y=110; y>0; y-- );
}
//数码管显示 // 显示方式为动态扫描,视觉暂留原理
void Display( uchar Num )// *p指向Main函数中的数组ShowNum的首地址
{
P0 = DataChar[ Num ];// 向P0赋段码值
DelayNms(2);// 短暂的延时
P0 = 0x00;// 让数码管熄灭,否则会造成数字重叠
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30);
if( Key == 0 )
{
Count += 1;
Count = (Count>9)? 0 : Count;
}
while( !Key );
}
Display( Count );
}
}

扩展资料
8051单片机具有如下功能:
8位CPU·4kbytes程序存储器(ROM) (52为8K)
128bytes的数据存储器(RAM) (52有256bytes的RAM)
32条I/O口线·111条指令,大部分为单字节指令
21个专用寄存器
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·双列直插40PinDIP封装
单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
参考资料来源:百度百科-51单片机

其实不存在移位问题,只是一个数的显示而已,按键1该数为1,铵键2该数为11……然后即时将该项数在数码管中显示。给你一个函数,作用时将一个数在第几个数码管中显示。
void display(uchar firstbit,uchar Num) //firstbit为要第一位显示数码管,NUM是要显示数的位数
{
uchar s;
for(s=0;s<Num;s++)
{
P0=0xff;
duan=1;
duan=0;
P0=table2[s+firstbit];
wei=1;
wei=0;
P0=tempdata[s];
duan=1;
duan=0;
delay(1);
}
}

重新选择需要点亮的数码管

  • 51单片机4位数码管显示数字
    答:1、静态显示:对于静态显示,可以直接利用IO口将对应的数字编码发送到数码管的段选引脚上。将P0口设置为0x3f,可以显示数字0。2、动态显示:对于动态显示,有两种常见的方法。一种是提高刷新频率,使得人眼无法分辨,产生显示的效果。另一种是利用锁存器件,先显示一个数字,锁定到一个数码管上,再显示...
  • 问下·TX-51单片机中数码管显示如何移位,比如说我按键1在第6个根数...
    答:其实不存在移位问题,只是一个数的显示而已,按键1该数为1,铵键2该数为11……然后即时将该项数在数码管中显示。给你一个函数,作用时将一个数在第几个数码管中显示。void display(uchar firstbit,uchar Num) //firstbit为要第一位显示数码管,NUM是要显示数的位数 { uchar s;for(s=0;s<...
  • 51单片机数码管显示问题
    答:采用这种方式一般都是所谓的动态扫描显示,往往不止一个数码管。一个数码管8段加一个公共端需要9根口线才能完全显示任意数字,为了节省IO口线,就利用了人眼视觉驻留的原理(就像电影胶片每秒24帧,连续起来播放你觉得没有任何间断),每一位数码管显示一会儿,然后关掉它,再去显示下一个数码管。只要保证...
  • 51单片机控制数码管显示hello和动态显示123456
    答:端口接动态数码管原理。P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。
  • 51单片机的共阴数码管怎么显示数字(c语言)
    答:要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int //数码管的段码编码 Uchar table[10] ={0x3f,0x06,...
  • 51单片机控制数码管显示不正常问题,为什么后面4位数码管1234和5678都...
    答:先建立程序的一般结构,然后定义一个code数组,里边存放数码管显示0~9的数据,之后定义一个display显示函数,传递参数但不返回参数,然后将传递的参数(1234或5678)分解成4哥单个数,然后依次选择要显示的数码管和数据,紧接消影和简单暂时,这样一个数码管显示就完成了,之后三个跟这个一样。最后在主函数...
  • 51单片机怎样用键盘控制数码管显示
    答:51单片机怎样用键盘控制数码管显示的方法。如下参考:1.首先,编写代码并点亮数码管。2.在编写源代码之后,确保原始代码是正确的。3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。5.表示数字0的代码在...
  • 关于51单片机数码管显示的问题。怎么样才能让第一个数码管显示2,第二...
    答:一种是动态扫描,一种是静态显示,静态显示的简单,略过...ORG 00H AJMP MAIN MAIN: MOV P1,#10H MOV P3,#09FH LCALL DELAY MOV P1,#20H MOV P3,#25H LCALL DELAY MOV P1,#40H MOV P3,#0DH LCALL DELAY MOV P1,#80H MOV P3,#99H LCALL DELAY AJMP MAIN ...
  • 51单片机中断控制数码管显示
    答:51单片机中断控制数码管显示,是一种通过单片机的中断系统控制数码管显示内容的技术。51单片机是一种常用的微控制器,广泛应用于各种嵌入式系统中。中断控制是单片机的一种重要功能,它允许单片机在执行主程序时,响应外部或内部的中断请求,转而执行中断服务程序。这种机制使得单片机能够处理多任务,提高系统的...
  • 如何用51单片机用一位数码管显示对应数字?
    答:首先你要把0到9的数字对应的七段码放在一个数组中,然后用一个变量计按键的次数或序号,把该序号的七段码输出到对应的端口即可。