51单片机,8位共阴极数码管动态显示12位学号,按键调整走动速度,C语言的
#include如何用C语言静态显示让8段数码管每个段同时显示不同的数
为了实现许多数字管的静态屏幕的有效性,我们需要考虑每个数字管的独立显示方法。每个数字管都由八位闩锁控制,所有闩锁都连接到P1 端口。
引脚的允许信号通过微控制器的P2 端口进行控制,以便每个数字管都可以独立显示不同的数字。
与动态屏幕相比,静态屏幕不会闪烁,但是每个数字管都独立且稳定地显示其相应的数字。
特定的实现步骤如下:1 将每个数字管连接到八个位闩锁,以确保每个引脚的输入连接到P1 端口。
2 使用微控制器的P2 端口控制闩锁的允许信号。
当信号有效时,八个位数据的关闭接收,输出将进入数字管的段选择线。
3 在程序中,对于每个数字管,将相应的八个数据数据发送到PIN,每个数字管都会显示一个数字,因此许多数字管可以同时显示其他数字。
4 为了使显示效果更稳定,可以适当增加延迟,以确保每个数字管都有足够的显示时间。
特定的延迟时间可以根据实际条件进行调整。
5 与动态屏幕相比,尽管不会闪烁,但应注意的是,静态屏幕可以消耗更多的硬件资源,因为每个数字管都需要独立的关闭和激活信用式品牌。
6 编写代码时,可以使用BIT活动来简化PIN控件。
例如,可以使用一个掩码来选择需要关闭的数据位,然后通过P1 端口将这些数据位发送到PIN。
通过上述方法,我们可以意识到许多数字管可以同时显示不同的数字而不会闪烁,从而提高了显示效果的稳定性。
51单片机驱动八位数码管电子钟
“ 0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xF,0xF,0xF,0xf,0xf,0xf,0xf, /01 2 3 4 5 6 7 u Charcodeduan [] 0x7 d,0x07 ,0x7 f,0x6 f}; //段代码选择时间表/0.1 ,2 ,3 ,4 ,7 ,8 ,9 ucharflag = 0; // sbitk1 = p3 ^4 ; //时钟sbitk2 = p3 ^5 ; //秒表sbitstart = p1 ^0; // startWatch start sbitStop = p 1 ^1 ; //暂停sbitclear = p1 ^2 ; // clear sbitclock = p3 ^0; //时钟启动sbitt1 = p3 ^1 ; //单击sbitt2 = p3 ^2 ; //单击sbitt3 = p3 ^3 ; //单击秒sbitp3 _4 = p3 ^4 ; sbitp3 _5 = p3 ^5 ; voiddelay(uintz); voiddisplay1 (); voiddisplay2 (); voidinit(); voidkeyscan1 (); voidkeyscan2 (); voidqiehuan(); voidgongzuo(); Utcharshi,Fen,Miao,Nam; utcharhour,分钟,秒,点; voidmain(){init(); p0 = 0x3 f; p2 = 0x00; //八个数字管显示为0tr0 = 0; tr1 = 0; 而(1 ){gongzuo();}} voiddelay(uintz)// delay program {uinti,j; for(i = z; i> 0; i-)for(j = 1 1 0; j> 0; j-);} voidDisplay1 ()// p2 有点选择,p0是段选择,显示格式为2 3 小时5 9 分,5 9 .9 9 秒{uchars,g; s = shi/1 0; g = shi%1 0; p2 = wei [0]; p0 = duan [s]; 延迟(1 ); p2 = wei [1 ]; p0 = duan [g]; 延迟(1 ); s = fen/1 0; g = fen%1 0; p2 = wei [2 ]; p0 = duan [s]; 延迟(1 ); p2 = wei [3 ]; p0 = duan [g]; 延迟(1 ); s = miao/1 0; g = miao%1 0; p2 = wei [4 ]; p0 = duan [s]; 延迟(1 ); p2 = WEI [5 ]; p0 = duan [g] | DP; 延迟(1 ); s = nam/1 0; g = nam%1 0; p2 = wei [6 ]; p0 = duan [s]; 延迟(1 ); p2 = WEI [7 ]; p0 = duan [g]; 延迟(1 );} voiddisplay2 ()// P2 是一些选择,P0是段选择,并且显示格式为:00 -00分钟-00秒{UC Hars,G; s =小时/1 0; g =小时%1 0; p2 = wei [0]; p0 = duan [s]; 延迟(1 ); p2 = wei [1 ]; p0 = duan [g]; 延迟(1 ); p2 = wei [2 ]; p0 = 0x4 0; 延迟(1 ); s =分钟/1 0; g =分钟%1 0; p2 = wei [3 ]; p0 = duan [s]; 延迟(1 ); p2 = wei [4 ]; p0 = duan [g]; 延迟(1 ); p2 = WEI [5 ]; p0 = 0x4 0; 延迟(1 ); s = sec/1 0; g = sec%1 0; p2 = wei [6 ]; p0 = duan [s]; 延迟(1 ); p2 = WEI [7 ]; p0 = duan [g]; 延迟(1 );} voidinite(){ea = 1 ; //打开总中断ET0 = 1 ; //打开T0并干扰ET1 = 1 ; //打开T1 中断tmod = 0x1 1 ; // T0模式工作1 ,T1 模式工作1 ,Th0 = 0x3 c; 1 ; //启动计时器/计数器T0TR1 = 1 ; //启动计时器/计数器T1 } voidTimer1 (void)intrupt1 ing1 //小时Interupsi T05 0ms {th0 = 0x3 c; TL0 = 0xB0; 点++; if(dot == 2 0){dot = 0; SEC ++; if(sec == 6 0){sec = 0; 分钟++; if(分钟== 6 0){分钟= 0; 小时++; 如果(小时== 2 4 )小时= 0;}}}} voidTimer3 (void)intrupt3 use3 //第二个表中断表T1 1 0MS {th1 = 0xd8 ; TL1 = 0xF0; if(++ nam == 1 00){nam = 0; if(++ miao == 6 0)//一分钟时间{miao = 0; +fen == 6 0){fen = 0; //返回0if(++ shi == 2 4 )shi = 0; //在2 4 小时内返回0}}}}} voidkeyscan1 (){if(〜start){delay(delay(delay)5 ); 如果(〜开始){tr1 = 1 ; display1 ();}} if(〜stop){delay(5 ); if(〜stop){tr1 = 0; display1 ();}} if(〜clear && tr1 == 0){delay(5 ); if(〜clear && tr1 == 0){nam = 0; miao = 0; fen = 0; shi = 0; display1 ();}}} voidke yscan2 (){if(〜clock){delay(5 ); if(〜时钟){tr0 = 1 ; display2 ();}} if(〜t1 ){delay(1 ); if(〜t1 ){while(while(while(while(whork clitment)〜t1 );小时=小时+1 ;如果(小时> = 2 4 )小时= 0; display2 ();}} if(〜t2 ){延迟(1 ); if(〜t2 == 0){e(〜t2 ); 6 0分钟= 0; display2 ;}} if(〜t3 ){delay(1 ); 1 ); (〜k1 ){p3 _4 = 0;} voidgongzuo(){qiehuan();keyscan2 ();} if(2 == flag){display1 (); Keyscan1 ();}}51单片机控制8个数码管并显示1-8
与P0端口微控制器相关的数字管中的段读数信号和连接的位读数信号。0000H执行的开发首先调用显示功能,并循环以无限的方式“新显示”。
在展示办公室,第一个R0和R1 寄存器,将R1 设置为位读取信号的初始值,并定义存储数字管段的表(TAB)。
该程序进入循环,并通过增加R0的值选择代码的不同数字管段。
将R0发送到段代码旁边的操作到对应于表的 + DPR,然后发送P0端口空白并发送显示段代码的P0端口。
然后,子例程的延迟以及R1 的值是作为位课信号的寄存器,而位移是通过RA RA指令。
更新R1 值后,发送到P2 P2 进行更新以更新到P2 以更新P2 位选择信号。
再次致电子例程中的延迟。
检查R0已在CJNE指令的8 次中循环。
如果不这样做,请继续循环,然后选择代码的其他数字管; 如果您的循环最多8 次,则程序以循环结束至8 次,该程序以循环结束至8 次,该程序以循环结束至8 次,到8 次,在边界和边缘的程序和边缘循环到程序中的8 个循环以8 结束,程序以循环结束至8 ,程序以循环结束至8 次,该程序的最后一个循环结束。
延迟的子例程最多通过循环减少稳定显示数字管而实现。
表的值分别对应于数字管的显示0至9 通过段读数和一些位选择的组合,可以理解动态显示数字管。
该程序实现了循环和延迟中的动态数字管,可用于显示1 到8 的数字。
通过调整信息并在表上延迟时间,可以显示更多的数字和符号,合适的分配控制应用程序。
单片机如何实现一位显示八位数据?
1 数字管道显示的演示程序:1 ,2 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,根据8 LED数字管,一个接一个地显示。参考连接:数字管数据P0,数字管控制P2 ; ; JMP Mainorg 000BHAJMP intt0org 01 00HMAIN:MOV P0,#0FFH; 安装初始值SETB ET0; 激活计时器0中断TR0; dptrmov dis_buf,amova,#2 movca,@a+dptrmov dis_buf+01 H,amova,#3 movca,@a+dptrmov Dis_buf+02 H, Amova,#4 Movca,@a+dptrmov dis_buf+03 h, Amova,#5 movca,@a+dptrmov dis_buf+04 h, Amova,#6 Movca,@a+dptrMov dis_buf+05 H, Amova,#7 Movca,@a +dptrmov dis_buf+06 H, Amova,#8 M OVCA,@a+dptrmov dis_buf+07 h,adisplay:movd dis_digit,#0feh; 可以添加其他代码以更改5 0h-5 7 h中的值,以更改显示SJMP main_lp。
=============================================== ================================================ int0:; 计时器0中断用于数字管的动态扫描Accpush PSWMOV P2 ,#0FFH; mov a,#dis_buf; r0,a; 下一个数字管已连接。
nldis_index,#0x07 ; 0A1 H,0B1 H; 0-9 和ABCDEF数字管显示代码结束