51单片机6位数码管显示时间
具有六位数数字管的C5 1 微控制器时钟与数字管点分开。
#include typedefunsignedintint; typedefunsignedcharucar;#defineKeyp2 #definekeymask0x0x0x07 sbitle1 = p2 ^6 ; //定义位控制端口sbitle2 = p2 ^7 ; ucharkeyrease = 0x00 = 0x00; timer.cuchacodenum [] = {0xc0.0xf9 .0xa4 ,0xb0,0x9 9 .0x9 2 ,0x8 2 ,0x8 2 ,0xf8 ,0x8 0,0x9 0}; voiddelay(uintt)//时钟延迟{while(t-);} vaidh_)2 3 )hh ++; else {hh = 0;}} vaidm_innasa(void)// 1 {if(mm <5 9 )mm ++; else {mm = 0; h_ grive();}} vaids_increase(void)//在秒内增加1 个{if(ss <5 9 )ss ++; else {ss = 0; m_increase();}}} viddisplay(Ucharseg,uchardigi)//显示一个单个数字管,seg = 0-9 数字,digi = bit 0-6 le2 = 0; p0 = 0x00; le1 = 1 ; p0 = num [seg]; if(digi == 1 || digi == 3 )p0&= 0x7 f; //显示分离器的延迟(5 0); p0 = 0xff; le1 = 0;} voidmain(void){p0 = 0xff; le1 = 0; le2 = 0; t0_init()while(1 ){if(mode!= 1 || t_cycle){display(hh/1 0.0); if(mode!= 2 || t_cycle){display(mm/1 0,2 ); //显示每分钟的十个数字显示(mm%1 0,3 ); //显示分钟的单个数字} display(ss/1 0.4 ); //显示第二个显示的十位数字(SS%1 0.5 ); //展览秒}}} voidkey_process(void)//键键的单个图形; keyRelease = lastKey&(〜currkey); lastKey = currkey; switch(keyRelease){case1 :if(mode == 2 )模式= 0; ElSemode ++; 中断; case2 :if(mode == 1 )h_increase(); if(mode == 2 )m_increase(); 休息; case4 :ss = 0; 中断; 默认值:herto;}} //#包括
th0= 0xD8 ; tl0 = 0xf0; tr0 = 1 ; tr0 = 1 ; ie = 0x8 2 ;} voidt0_intsrv(void)inter {// iNTER {// iNTER {//定时器再次开始时。
Th0 = 0xd8 ; tl0 = 0xf0; loop} if(u_1 0ms> 9 9 )// 1 000ms = 1 秒{u_1 0ms = 0; s_increase();} key_process();
51单片机按键控制数码管?
#include //您可以参考#defineucharunsignedchar#include unsignedchar*c; sbit K0 = p3 ^2 ; sbit k1 = p3 ^3 ; Sbit K2 = p3 ^4 ; SBIT K3 = P3 ^5 ; sbi t k4 = p3 ^7 ; sbit LED1 = p1 ^7 ; uchar k; bit y0,y1 ,y2 ,y3 ,y4 ,y5 ; bit t,s,ld;uchartable[]={0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d,0x07 ,0x7 f,0x6 f,0x3 f,0x06 ,0x06 ,0x7 d,0x7 f,0x6 f,0x3 f,0x06 ,0x06 ,0x 5 b,0x4 f,0x6 6 ,0x6 d,0x7 d}; voidsendonechar(charc)//将字节发送到PC {ti = 0; sbuf = c; 而(!ti); ti = 0; } voidsendstring(char*st)//将字符串发送到pc {while(*st){s endonechar(*st ++); }}} voidmain(){scon = 0x5 0; // SCON:MODE1 ,8 -BITUART,ENABLERCVR TMOD = 0x2 0; // tmod:timer1 ,mode2 ,8 -bitreloadpcon = 0x8 0; //数据位8 ,停止位1 有效位不可用(1 1 .05 9 2 m)Th1 = 0xf4 ; // TH1 :reloAdvaluefor2 4 00@1 1 .05 9 2 MHz TR1 = 1 ; //启动timer1 es = 1 ; //发送字符串} if(k0 == 0 && y0 == 0){y0 = 1 ; sendstring(c); 0;} if(k1 == 0 && y1 == 0){y1 = 1 ; C =“ BS”; sendstring(c); //发送字符串} if(k1 == 1 ){y1 = 0;} if(k2 == 0 && y2 == 0){y2 = 1 ; C =“ DS”; sendstring(c); //发送字符串} if(k2 == 1 ){y2 = 0;} if(k3 == 0 && y3 == 0){y3 = 1 ; c =“ es”; sendstring(c); //发送字符串} if(k3 == 1 ){y3 = 0;} if(k4 == 0 && y4 == 0){y4 = 1 ; c =“ fs”; sendstring(c); if(k4 == 1 ){y4 = 0;} // for(i = 0; i <4 000; i ++); //延迟短时间}}} voidChuankou(void)interrupt4 {if(ri == 1 ){ri = 0; if(t == 1 ){if(sbuf =='z'){k ++; ld = 〜ld;} s = 1 ; t = 0; if(k == 1 0){k = 0;} p1 =〜表[k]; LED1 = LD; } if(sbuf =='a'&& s == 1 ){T = 1 ; s = 0;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ///////////////////////////// ///////////////////////////// ///////////////////////////// sbit LED2 = p3 ^3 ; //接收AA,P.2 输出高水平,P3 .3 输出低水平。
SBIT K0 = P3 ^5 ; BIT Y0,T,S; UCHAR K; UCHARABLE [] = {0x3 F,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d ,0x07 ,0x7 f,0x6 f,0x3 f,0x06 ,0x5 b,0x4 f,0x6 6 ,0x6 d,0x7 d}; voidSendoneChar(charc)//发送 字节到PC {ti = 0; sbuf = c; 而(!ti); ti = 0; } voidsendstring(char*st)//将字符串发送到PC {while(*st){sendOneChar(*st ++); }} voidmain(void){scon = 0x5 0; // REN = 1 允许串行接受状态,串行端口工作模式1 TMOD = 0x2 1 ; //计时器工作模式2 PCON = 0x8 0; //数据位8 ,停止位1 有效检查数字NO(1 1 .05 9 2 m)TH1 = 0xF4 ; // th1 = 0xfd; 波特率2 4 00 th0 =(6 5 5 3 6 -5 4 2 5 3 )/2 5 6 ; // 5 0ms TL0 =(6 5 5 3 6 -5 4 2 5 3 )%2 5 6 ; tr1 = 1 ; ES = 1 ; //打开串行端口中断ea = 1 ; //打开总中断LED1 = 1 ; LED2 = 0; // ET0 = 1 ; // TR0 = 1 ; s = 1 ; k = 0; p1 =〜表[k]; 而(1 ){if(k0 == 0 && y0 == 0){y0 = 1 ; c =“ az”; sendstring(c); //发送字符串} if(k0 == 1 ){y0 = 0;}}} voidchuankou(void)interrupt4 {if(ri == 1 ){ri = 0; if(t == 1 ){if(sbuf =='s'){LED1 = 〜LED1 ; LED2 = 〜LED2 ; K ++;} // if(SBUF =='S'){LED1 = 1 ; LED2 = 0; K--; k-;} S = 1 ;} S = 1 ; t = 0; t = 0; if(k == 1 0){k = 0;} if(k == 2 5 5 ){k = 9 ;} p1 =〜表[k]; } // 1 a No. 2 B-如果(sbuf =='a'&& s == 1 ){t = 1 ; s = 0;}}} voidt0_time()interrupt1 {th0 =(6 5 5 3 6 -5 4 2 5 3 )/2 5 6 /2 5 6 ; // 5 0ms TL0 =(6 5 5 3 6 -5 4 2 5 3 )%2 5 6 ; K ++; 如果(k == 1 0)//修改时间这里{k = 0; LED1 = 1 ; LED2 = 1 ; }}}
51单片机30秒倒计时,用数码管显示的,c程序,元件只有at89c51和数码管,没有其他的,
#include #defineuintunsignine#defineucharunSignedCharsBitdula = p2 ^6 ; sbitwela = p2 ^7 ; sbitd1 = p1 ^0; Ucharnum,0x0,0x,0x x07 .0x7 f,0x6 f,0x7 7 .0x7 c,0 x3 9 .0x5 e,0x7 9 ,0x7 1 }; Voyeray(Uintz); voidmain(){num = 0; tt = 0; tmod = 0x1 1 ; //将计时器0设置为工作模式(6 5 0000(6 5 5 6 -1 -1 -1 0000)/2 5 6 ; 6 5 5 3 6 -2 0000)%2 5 6 ; // ea = 1 ; //打开总中断ET0 = 1 ; //打开计时器0中断E T1 = 1 ; tr0 = 1 ; //开始小时0tr1 = 1 ; wela = 1 ; // 1 1 1 01 01 0p0 = 0xea; wela = 0; dua = 1 ; p0 = 0x3 f; dua = 0; while(1 ){num =(t(tm = {th num1 = 0; p1 = 〜p1 ; 0; dula = 1 ; p0 = table [num]; dula = 0;}}}}}}}}}} voyeray(uii ntz) interrupt1 {th0 =(6 5 5 3 6 -1 0000)/2 5 6 ;
用数码管及定时器实现简易时钟
微控制器 +数字管。
您可以上课。
#include #defineucharsigned upsigned clistignedIntsIntedIntsIntsIntIntsIntIntsIntedIntIntsIntsIntsIntIntsIntIntsIntIntsIntIntIntEntIntIntsInteDintsIntsIntsIntsIntsIntsinings = p1 ^ 0; //创建sbtiaoshi = p1 ^ 2 ; // naozhonguinta(b; minu,sec,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xf7 ; 0x4 f; 0x4 f; 0x4 f; 0x6 6 ,0x6 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 D,0x7 d,0x7 d,0x7 D.0dsndsnex7 dsnds nds nds nds nds nds nds nds nds nds nds nds nds nds nds x. 0. ,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d,0x7 d; {tresscan(){tr1 ) / 0跨度函数。
// s更改(0-1 -0); // SEATE开关(0-1 - 2 -0)通过外部中断成功。
显示(小时,minu1 ,sec1 ); // aliveth0,minu0,第1 0节); //时钟手表显示(k) / k)是秒表状态(0。
1 -0。
0秒表; 1 个秒表已从零开始。
2 / {显示sec); //秒表显示******* {a = 0; k = 0; s = 0; k = 0; = 0; 一小时= 0; minu0 = 0; sec1 = 0; sec1 = 0; sec1 = 0; sec1 = 0; tmod = 0; tmod = 0; TL 0 =(6 5 5 3 6 -5 000)%2 5 6 ; th1 =(6 5 5 3 6 -5 0000) / 2 5 6 ; TL1 =(6 5 5 3 6 -5 0000)%2 5 6 ; ET0 = 1 ; ET0 = 1 ; ET0 = 1 ; ET1 = 1 ; // 1 ; / 1 ; // 1 ; = 1 ; px0 = 1 ; px1 = 1 ; tr1 = 0; //旋转器0 ****************************************************************************** // msec-级mini ++; //第二个小时 +;如果(小时== 6 0) / 0; 0; 0 函数************************************************************************************************************************************************************************************************************************** k = 0; minu = 0;}}} /*0.0 = 0;}} / ***************************************************************************************************************************************************************************************************************************************************************************** 2 5 6 ; TL1 =(6 5 5 5 3 6 -5 0000)%2 5 6 ; ur1 ==小时&& minu0 == minu1 )语音(b == 6 0){sec 1 0 == 6 0; 0:3 = 6 0 + 0;}}}} 0;} minu0 = 0 ********* {{{Qingling = 0){sec1 = 0; hu1 = 0; acy1 = 0;}}}}} {beft == 0){minuhi == 0){pinu1 == 0){delay(1 0); (1 0){qingling == 0){sec 1 0; minu0 = 0;} if} if(tiaofen == 0){ay(1 0); 如果 (tiaofen = 0){minu0 == 0){minU0 == 6 0;};}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}为给所为作用 m1 = minu / 1 0; m1 = minu%1 0; =秒 / 1 0; S2 = SEC%1 0; p0 = 0xff; p2 = 0xff; p2 = 0xff; p2 = 0xf; 5 ); p0 = 0xff; p2 = table [m2 ]; p0 = 0xff; p2 = 0xff; p2 = 0x4 0; p2 = 0x4 0; p0 = 0xff; p2 = [s1 ];} p2 = 0xff; p2 = 0x of; {S2 ); {s2 ) / *********************************************************************************************** y> 0; y> 0;
用51单片机测频率,T0定时,T1计数,具体程序应该怎么写呀,跪求完整点的
数字管或LCD屏幕显示? 什么是晶体振荡器频率? 使用计时器时,首先设置工作模式,然后加载初始值,打开中断,然后打开计时器/计数器。
初始化设置如下: voidinit()//初始化设置{tmod = 0x5 1 ; voidTimer0()naturt1 //注意:计时器0中断计数为1 {th0 =(6 5 5 3 5 -5 0000)/2 5 6 ; tl0 ==(6 5 5 3 5 -5 0000)2 5 6 ; 主程序首先初始化,然后连续显示。
重要的是要注意,某些频率计算要求根据实际条件调整初始定时值。
计算初始定时值的公式如下: (预期频率周期为6 5 5 3 5 )/2 5 6 例如,如果晶体振荡器频率为1 2 MHz,预期频率为5 0Hz,则对应于5 0ms的周期数为2 000000/5 0 = 2 00000。
换句话说,预期的时期数量为2 00,000。
替换上述方程式以获取初始定时值(6 5 5 3 5 -2 00000)/2 5 6 值得注意的是,实际应用需要考虑细节,例如中断优先级和计时器溢出处理。
重要的是要确保您的程序稳定稳定地运行。
以上是使用5 1 微控制器进行频率测量的基本编程框架。