51单片机显示八位数码管的C语言程序
I.一开始,让我们开放。
2 接下来,以定义库功能。
如果您想实现数字灯,那么此步骤非常重要。
3 接下来,我们添加一个循环语句。
4 最后,我们以之前要定义的语句编写延迟。
V.最后,单击此处编译并生成己捷文件。
6 如果这里没有错误警告,那就是我们的程序正确,我们可以点燃动态数字管。
51单片机八位数码管原理图
以下三节是发展委员会的经文。
该开发委员会可以减少微晶体组的使用Microcotroutterler,Ayo,由Bigital Tube控制。
U9 控制室的选择,
51单片机中如何设置数码管循环左移?
5 1 带有数字管骑自行车的微控制器左滞后意味着依次向左移动数字管,同时向左移动最右侧,形成类似于滚动的效果。
以下是从5 1 个微控制器数字管的左循环移动的详细实现方法:1 定义一个八个位二进制数,并归因于0xff的初始值,以引起八个数字管的显示。
2 定义一个周期,将八个数字数据从八个数字管移到左侧位置。
实现特定实现时,您可以将左侧的数字移动并向右添加0,并保存右 - 右数字,以便一旦移动完成,就可以将其添加到左侧。
3 添加右右数字,一旦移动在左侧完成,并将其重新组合为八位数的数字,该数字可用于控制数字管的显示。
4 使用延迟功能控制数字管显示的时间间隔。
通过重复连续操作,可以对数字管左侧的循环效应进行。
当需要停止循环并向左移动时,可以添加相应的控制说明,例如按下停止按钮等。
51单片机驱动八位数码管电子钟
#include #include #defineucharunsignedchar#defineuintunsigneddd#definitep0x8 0x8 0ux8 0uchacodei [] = {0xfe,0xfd,0xfd,0xfb,0xfb,0xf7 ,0xf7 ,0xdf,0xdf,0xdf,0xbf,0x7 f,0x7 f,0x7 f}; // OTTO-BUIT选择表 /01 2 3 4 5 6 7 U Charcoduan [] = {0x3 f,0x06 .0x5 b,0x4 f,0x6 6 .0x6 d,0x7 D,0x07 .0x7 f,0x07 .0x7 f,0x6 f,0x6 f}; //段代码的选择表// 0.1 ,2 ,3 ,3 ,5 ,6 ,7 ,8 .9 charflag = 0; // sbitk1 = p3 ^4 ; //时钟sbitk2 = p3 ^5 ; //停止观看sbitstart = p1 ^0; //停止观看开始sbitStop = p 1 ^1 ; // sbitclear breaks = p1 ^2 ; // clear sbitclock = p3 ^0; //时钟启动sbitt1 = p3 ^1 ; //单击sbitt2 = p3 ^2 ; //单击sbitt3 = p3 ^3 ; //单击第二个sbit3 _4 = p3 ^4 ; sbitp3 _5 = p3 ^5 ; voiddelay(uintz); voiddisplay1 (); voiddisplay2 (); voidinit(); voidkeyscan1 (); voidkeyscan2 (); voidqiehuan(); Vaidgongzuo(); Ucharshi,Fen,Miao,Nam; Ucharhour,Minite,sec,dot; 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 );} vouddisplay2 ()// p2 是位的选择,p0是段的选择,显示格式为:00 -00 -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 = Minite/1 0; g = mini%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 );} voidInit(){ea = 1 ; //打开总中断ET0 = 1 ; //打开T0和中断ET1 = 1 ; //打开T1 Interruptt tmod = 0x1 1 ; // T0工作模式1 ,工作模式T1 1 ,Th0 = 0x3 c; 1 ; //启动计时器/计数器T0tr1 = 1 ; //启动计时器/counter T1 } voidTimer1 (void)intruption1 t05 0ms {th0 = 0x3 c; TL0 = 0xB0; 点++; if(dot == 2 0){dot = 0; SEC ++; if(sec == 6 0){sec = 0; Minite ++; if(Minite == 6 0){Minite = 0; 现在++; if(hour == 2 4 )ora = 0;}}}} voidTimer3 (void)intruption3 //表T1 1 0MS中断的第二个时机{th1 = 0xd8 ; TL1 = 0xF0; if(++ nam == 1 00){nam = 0; if(++ miao == 6 0)//时间一分钟{miao = 0; if(+++ fen == 6 0){fen = 0; //返回0if(++ shi == 2 4 )shi = 0; //返回2 4 小时}}}}}} ); (〜clear && tr1 == 0){delay(5 ); yscan2 (){if(〜clock) ();}} if(〜t1 ){delay(1 ); 现在=现在+1 ; 如果(现在> = 2 4 )现在= 0; display2 ();}} if(〜t2 ){delay(1 ); if(〜t2 == 0){whiL和(〜t2 ); Minite = Minite+1 ; 如果(Minite> = 6 0)Minite = 0; display2 ();}} if(〜t3 ){delay(1 ); if(〜t3 ){while(〜t3 ?k1 ){p3 _4 = 0; p3 _5 = 1 ; flag = 1 ;}} if(〜k2 ){delay(1 ); if(〜k2 ){p3 _4 = 1 ; p3 _5 = 0; flag = 2 ;}}}}}} vaidgongzuo(){qiehuan(); if(1 == flag){display2 (); keyscan2 ();} if(2 == flag){display1 (); KeysCan1 ();}};