熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-12-19 14:22
正文摘要:設(shè)計(jì)倒計(jì)時(shí)程序,要求按1,10秒倒計(jì)時(shí),按2,20秒倒計(jì)時(shí)。我寫了倒計(jì)時(shí)程序但鍵盤加不進(jìn)去。求大神解答,可酬金答謝 說明:P0段選,P2位選。共陽極數(shù)碼管 #include<reg52.h> unsigned char s ... |
以解決,感興趣的可以看看 #include<reg51.h> unsigned char shi=0,ge=0,num1,num2,a; unsigned int x,y,z; unsigned char code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void display(shi,ge); unsigned char key() //鍵盤 { unsigned char row=0,col=0,k; unsigned int t; P3=0x0F; if(P3==0x0F) return k; t=20000;while(t--); if(P3==0x0F) return k; for(row=0;row<4;row++) { P3=~(0x80>>row); k=P3&0x0F; if(k!=0x0F) { while(k&(0x08>>col)) col++; k=15-(row*4+col); return k; } } } void delay(x) //延時(shí) { for(y=x;y>0;y--) for(z=110;z>0;z--); } void display(shi,ge) //段選位選控制函數(shù) { P0=table[shi]; P2=0x7f; delay(5); P0=table[ge]; P2=0xbf; delay(5); } main() //主函數(shù) { TMOD=0x01; EA=1;ET0=1;TR0=1; P0=0xc0; P2=0x3f; a=key(); if(a==1) num1=11; if(a==2) num1=21; if(a==3) num1=31; if(a==4) num1=41; if(a==5) num1=51; if(a==6) num1=61; if(a==1||a==2||a==3||a==4||a==5||a==6) {while(1) { display(shi,ge); if(num2==20) { num2=0; num1--; if(num1==0) return; if(key()==0) return; shi=num1/10; ge=num1%10; } } } } void time1() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num2++; } |
wsxujn 發(fā)表于 2018-12-19 22:52 謝大佬啊,點(diǎn)醒了我,有點(diǎn)效果了,我在小改一下。 |
給你改用5ms查詢方法完成動(dòng)態(tài)數(shù)碼管顯示和倒計(jì)時(shí),用開發(fā)板的矩陣鍵盤P3.7模擬地可以成為4個(gè)獨(dú)立按鍵。 #include<reg52.h> sbit key1=P3^0; sbit key2=P3^1; //sbit key3=P3^2; //sbit key4=P3^3; sbit GND=P3^7;//開發(fā)板矩陣鍵盤模擬地 unsigned char shi,ge,num1=0,num2=0;//a; //unsigned int x,y,z; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //unsigned char code shu[]={0,10,20,30}; //void delay(x); //void shuhanshu(a); //void display(); void key() { static bit key1_sign,key2_sign; //靜態(tài)-按鍵自鎖標(biāo)志 static unsigned char count1,count2;//靜態(tài)-消抖計(jì)數(shù)變量 if(!key1) //按鍵1按下 { // 10ms消抖 自鎖長按無效 倒計(jì)時(shí)中鎖定按鍵無效 if((++count1>=2)&&(key1_sign==0)&&(num1==0)) { key1_sign=1; //按鍵1自鎖標(biāo)志置1 num1=10; //倒計(jì)時(shí)變量賦值 num2=0; //計(jì)時(shí)變量清0 } } else //按鍵1抬起 { key1_sign=0; //按鍵1自鎖標(biāo)志清0 count1=0; //消抖計(jì)數(shù)1清0 } if(!key2) //按鍵2按下 { if((++count2>=2)&&(key2_sign==0)&&(num1==0)) { key2_sign=1; //按鍵2自鎖標(biāo)志置1 num1=20; num2=0; } } else //按鍵2抬起 { key2_sign=0; //按鍵2自鎖標(biāo)志清0 count2=0; //消抖計(jì)數(shù)2清0 } } /* void delay(x) { for(y=x;y>0;y--) for(z=110;z>0;z--); } */ void display() { static bit i=0; shi=num1/10; ge=num1%10; P0=0xff;//消隱 if(i==0) { P0=table[shi]; P2=0x7f; i=~i; } else { P0=table[ge]; P2=0xbf; i=~i; } } void main() { // key(); // a=key(); // num1=shu[a]; TMOD=0x01; TH0=(65536-5000)/256;//5ms TL0=(65536-5000)%256; EA=1; ET0=1; TR0=1; GND=0; while(1) { if(TF0==1)//查詢定時(shí)器中斷溢出標(biāo)志 { TF0=0; key(); num2++; if(num2==200)//1秒 { num2=0; if(num1>0) num1--; } display(); } } } void time1() interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; } |
把按鍵程序放到 while 里啊 |
求大神幫忙啊 |
Powered by 單片機(jī)教程網(wǎng)