单片机 按键(采用独立式按键)按下一次,让液晶第一位显示的数码加1,显示范围0~9?
程序列表如下:#include单片机 怎样用两个独立按键控制一位数码管显示,就是按下其中一个按键就加1,按下另一个按键就减1,0~9显
例如,您定义的数字如下: {延迟(5 0); if(p3 ^0 == 1 ){aa ++; if(aa> = 1 0)aa = 0;}} if(p3 ^1 == 0){delay(5 0); if(p3 ^ 1 == 0){aa ++; if(aac语言 怎样用两个独立按键控制一位数码管显示 就是按下其中一个按键就加1 按下另一个按键就减1 0~9显示
这种简单的实现方法是通过两个独立的密钥来控制数字管的显示。1 ,周期显示0到9 实现时,第一个定义了两个键,一个是添加1 的负责,另一个是负责减少1 的键。
只有一个数字管,采用静态显示器。
该程序如下:#include#defineucharnsignedchartabletable [] = {0x3 f,0x06 .0x5 b,0x4 f,0x6 6 .0x6 d,0x7 d,0x07 .0x7 f}; sbitkeup = p3 ^ 0; sbitKeyDn = p3 ^ 1 ; main(){uchari; i = 0; 而(1 ){p1 = table [i]; if(keyup == 0){i ++; while(keyup == 0);} if(keydn == 0){if(i> 0)i--; 虽然(keydn == 0);} i%= 1 0;}}在该表中的数据通过P1 端口释放,并控制数字管以显示相应的数字。
当支持密钥键时,价值I增加; 为了避免钥匙台,使用键循环等待释放键。
应该注意的是,i的值范围在0到9 之间受到限制,并且圆形显示的效果由i%= 1 0获得。
这样,即使我大于9 ,它也会自动恢复0,从0到9 到达圆形显示。
此设计思想适用于需要简单的数字显示的各种应用程序方案,例如仪表,时间,等等。
单片机控制多位数码管的电子时钟程序
使用微控制器检查电子时钟到多数字数字管,并使用独立的按钮来控制它,这可以显示时间和日期,并且具有警报功能。Keil Engineering C语言代码: /**** ****************************************************** ***** **项目名称:数字管电子时钟实现功能:数字管道视图时间和日期,时间和日期可以进行调整,并且可以设置闹钟,并且闹钟将呼叫一分钟。
**************************** out Defineucharunsignedcharuntnumwe, TT, T, Numdu, Set, Aclock, Rili; unsignedlongent小时,时间1 = 0; unsignedlontsondsecond,minuse,小时,年= 2 01 2 ,月份= 1 2 ,day = 3 1 ; uCharCodedu [] = {0x3 f,0x06 .0x5 b,0x4 f,0x6 6 .0x6 d,0x7 d,0x07 .0x7 f,0x6 f,0x7 .0x7 c,0x3 9 .0x5 e .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 C, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c, 0x7 .0x7 c ,0x7 .0x7 c。
0xfb,0xf7 .0xef,0xdf,0xbf,0x7 f}; ucharmth [1 3 ] = {0.3 1 ,2 8 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 1 ,3 0,3 1 ,3 0,3 1 }; //每月的相应天数ucharymth [1 3 ] = {0.2 ,9 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,1 ,1 ,2 }; ; sbitbeep = p2 ^2 ; //戒指Voyeray(Uintel); //延迟程序坟墓显示(Uintsd,Uintmm,Uinthy); // show program voidadd(); //添加voidalarmclock(); //闹钟voidinit(); //初始化intclock(); //计算时间voidCalender(); //计算日期voidmain(){p2 = 0xff; init(); 而(1 ){add(); 如果(rili == 1 )//数据日历和时间显示(日,月,年); Elsedisplay(其他,分钟,小时); AlarmClock();}} voidDisplay(Uintsd,Uintmm,uinthy){Inty0,Y1 ,Y2 ; 如果(rili == 1 ){y0 = hy/1 000,y1 = hy%1 000; y2 = hy%1 00;} for(numWe = 0; numwe8 ; numwe ++){p0 = 0xff; wela = 1 ; p0 =我们[numwe]; wela = 0; p0 = 0xff; dua = 1 ; switch(numwe){case0:p0 =(tt == 1 set == 1 )? 0x00 :( rili == 1 )? 您[Y0]:您[hy/1 0]; 休息; case1 :p0 =(tt == 1 set == 2 )? 0x00 :( rili == 1 )? 您[Y1 /1 00]:您[hy%1 0]; 休息; case2 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 3 )? 0x00:您[Y2 /1 0]; 休息; CAS E3 :p0 =(tt == 1 set == 4 )? 0x00 :( rili == 1 )? 您[hy%1 0]+0x8 0:您[mm/1 0]; 休息; case4 :p0 =(tt == 1 set == 5 )? 0x00 :( rili == 1 )? 您[mm/1 0]:您[mm%1 0]; 休息; case5 :p0 =(rili!= 1 )? 0x4 0 :( tt == 1 set == 6 )? 0x00:您[mm%1 0]+0x8 0; 休息; case6 :p0 =(tt == 1 set == 7 )? 0x00:您[SD/1 0]; 休息; case7 :p0 =(tt == 1 set == 8 )? 0x00:您[SD%1 0]; 休息;} dua = 0; 延迟(5 );}} voidInit()//初始化{wela = 0; dua = 0; tmod = 0x01 ; //将小时0设置为工作模式1 .0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //计时器是八位//定时5 MSTL0 =(6 5 5 3 6 -5 0000)%2 5 6 ; //小时低8 件即= 0x8 f; //打开中断TCON = 0x1 5 ; //开始小时和工作模式} intclock()//计算时间{if(t == 1 0 | t == 2 0)tt =! tt; ////////// 9 /// 9 ///// 9 如果(t == 2 0){t = 0; if(!(set!= 0aclock == 0))时间++; 如果(时间=时间=时间1 小时1 +6 0)pip = 0; elsebeep = 1 ; 日历 (); if(aclock == 0){其他=时间%6 0; 分钟=(时间%3 6 00)/6 0; 小时=时间/3 6 00; 如果(时间== 2 4 ){time = 0; 时间= 0;}}其他{其他= time1 %6 0; 分钟=(Time1 %3 6 00)/6 0; 时间= Time1 /3 6 00; 如果(时间== 2 4 ){time = 0; time = 0;}}}}}}} voica(uintel){uinti,j; 对于(i = 0; idel; i ++)for(j = 0; j1 00; j ++);} void houth0()intrupt1 //小时0中断{th0 =(6 5 5 3 6 -5 0000)/2 5 6 ; //小时为8 位//小时5 mstl0 =(6 5 5 3 6 -5 0000)%2 5 6 ; 计时器为低八++; clock();} voidSetTime()interrupt0 // it0 {if(key0 == 0){delay(2 ); (set == 2 | set == 5 )set = set+2 ; ElSet ++;} ElSet ++; 如果(set == 9 ){set = 0; t = 0;} // while(!key0);}}}}}} voidCalendar()interrupt2 / / calendar {if(key3 == 0){delays(delay(2 ); 如果(key3 == 0)rili =! rili; set = 0; aclock = 0;}} voidCalender()//计算日历{if(hour = = 8 6 4 00){day ++; if(((年%4 == 0 Year%1 00!= 0)|(年%4 00 == 0))mth [2 ] = 2 9 ; Elsemth [2 ] = 2 8 ; if(Daymth [month]){day = 1 ; 一个月++; if(月1 2 ){月= 1 ; 年++;}}}}}}} voidadd()//添加一个{intge,ge1 ,ge2 ,shi1 ,shi1 ,shi2 ,bai2 ,qian2 ; if(rili == 1 ){ge = day%1 0; ge1 = mo nth%1 0; GE2 =年%1 0; shi =天/1 0; shi1 =月/1 0; shi2 =年%1 00/1 0; bai2 =年%1 000/1 00; Qian2 = Year/1 000;}其他{ge =第二%1 0; GE1 =分钟%1 0; GE2 =时间%1 0; shi =其他/1 0; shi1 =分钟/1 0; shi2 = hour/1 0;} if(key1 == 0){delay(2 ); if(ke y1 == 0){if(rili == 1 ){if((((年%4 == 0 Year%1 00!= 0))|(年%4 00 == 0))ymth [2 ] = 1 0; Elseymth [2 ] = 9 ; switch(set){case1 :qian2 =(qian2 +1 )%1 0; 休息; case2 :bai2 =(bai2 +1 )%1 0; 休息; case3 :shi2 =(shi2 +1 )%1 0; 休息; 案例4 :GE2 =(GE2 +1 )%1 0; 传播AK; case5 :shi1 =(shi1 +1 )%2 ; 休息; case6 :ge1 =(shi1 == 1 )? (GE1 +1 )%3 :(GE1 +1 )%1 0; 休息; case7 :shi =(月== 2 )? (SHI+1 )%3 :(SHI+1 )%4 ; 休息; case8 :ge =(shi == 3 )? (ge+1 )%ymth [月] :(月== = 2 )? (GE+1 )%ymth [2 ] :( GE+1 )%1 0; 休息;}年= Qian2 *1 000+bai2 *1 00+shi2 *1 0+ge2 ; 月= SHI1 *1 0+GE1 ; day = shi*1 0+ge;} else {switch(set){case1 :shi2 =(shi2 +1 )%3 ; 休息; 案例2 :GE2 =(GE2 +1 )%4 ; 休息; case4 :shi1 =(shi1 +1 )%6 ; 休息; 案例5 :GE1 =(GE1 +1 )%1 0; 休息; CAS E7 :shi =(shi+1 )%6 ; 休息; 案例8 :GE =(GE+1 )%1 0; 休息;} second = shi*1 0+ge; 分钟= shi1 *1 0+ge1 ; 时间= shi2 *1 0 +ge2 ; if(aclock == 0)时间=时间*3 6 00+分钟*6 0+秒; elSetime1 =小时*3 6 00+minute*6 0+sect;} while(!key 1 );}}}}}}}}} voidalarmclock()//设置alarm arlard {if(key2 == 0){delays(delays(2 ); if(key2 == 0){while(!key2 ); 时钟= 1 ; rili = 0; set = 0; 而(1 ){if(rili == 1 )显示(日,月,年); Elsedisplay(其他,分钟,小时); 添加 (); if(key2 == 0){whiL e(!key2 ); 时钟= 0; set = 0; break;}}}}}}}} pin连接指令:1 PO空间连接8 是一个常见的负数字管; 分别,段锁定和管道上的位锁定; 可以选择闹钟,日期和时间。
: