熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-4-17 20:36
正文摘要:要做一個(gè)搶答器,60秒倒計(jì)時(shí)結(jié)束后紅燈亮,但數(shù)碼管不滅,想問(wèn)一下怎么解決? |
flag=4;//開始賦值為4,修復(fù)啟動(dòng)時(shí)要先按復(fù)位鍵BUG while(1) { |
while(1) { if(flag!=0) { if(key1==0) delay10ms(); if(key1==0) flag=1; //開始標(biāo)志 key_scan(); switch(flag) { case 1:daojishi();break; case 2:yihao();break; case 3:erhao();break; case 4:fuwei();break; } } else if(key4==0) delay10ms(); if(key4==0) flag=4; //復(fù)位標(biāo)志 } 這樣調(diào)整一下,修復(fù)搶答鍵按下后,再按開始鍵繼續(xù)倒計(jì)時(shí)BUG |
#include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit P20=P2^0; sbit P21=P2^1; sbit P22=P2^2; //黃燈 sbit P23=P2^3; //紅燈 sbit P26=P2^6; sbit P27=P2^7; sbit key1=P3^2; //倒計(jì)時(shí)開關(guān) sbit key2=P3^0; //1 sbit key3=P3^1; //2 sbit key4=P3^5; //復(fù)位開關(guān) void daojishi(void); void yihao(void); void erhao(void); void fuwei(void); void key_scan(void); uchar n,k,flag; void delay5ms() { uchar i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void delay10ms() { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } void main() { n=60; k=20; P22=0; P23=0; P1=0xff; TMOD=0x01; //T0用中斷定時(shí)1s,方式一 TH0=(65536-50000)/256; TL0=(65536-50000)%256; IE=0x8f; IT0=1; IT1=1; flag=0; while(1) { if(key1==0) delay10ms(); if(key1==0) flag=1; //開始標(biāo)志 if(flag!=0) { key_scan(); switch(flag) { case 1:daojishi();break; case 2:yihao();break; case 3:erhao();break; case 4:fuwei();break; } } else if(key4==0) delay10ms(); if(key4==0) flag=4; //復(fù)位標(biāo)志 } } void t_0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; k--; if(k==0) { k=20; if(n>0) //增加一個(gè)判斷 {n--;} else /* n--; if(n==0) */ { TR0=0; P23=1; P0=0xff; flag=0; //禁止除復(fù)位按鈕外其它按鈕 標(biāo)志 } } } void key_scan() { if(key1==0) { delay10ms(); if(key1==0) { flag=1; while(key1==1) { delay10ms(); flag=0; } } } if(key2==0) { delay10ms(); if(key2==0) { flag=2; while(key2==1) { delay10ms(); flag=0; } } } if(key3==0) { delay10ms(); if(key3==0) { flag=3; while(key3==1) { delay10ms(); flag=0; } } } if(key4==0) { delay10ms(); if(key4==0) { flag=4; while(key4==1) { delay10ms(); flag=0; } } } } void daojishi() { TR0=1; P0=0xff; P20=1; P21=0; if(n>=10) P0=zixingma[n/10]; delay5ms(); P0=0xff; P20=0; P21=1; P0=zixingma[n%10]; delay5ms(); } void yihao() { P0=0xff; P1=0xf9; P22=1; flag=0;//禁止除復(fù)位按鈕外其它按鈕 標(biāo)志 } void erhao() { P0=0xff; P1=0xa4; P22=1; flag=0 ;//禁止除復(fù)位按鈕外其它按鈕標(biāo)志 } void fuwei() { TR0=0; P2=0; P0=0xff; P1=0xff; n=60; } |
本帖最后由 機(jī)電小生 于 2020-4-17 21:35 編輯 程序如下: #include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit P20=P2^0; sbit P21=P2^1; sbit P22=P2^2; //黃燈 sbit P23=P2^3; //紅燈 sbit P26=P2^6; sbit P27=P2^7; sbit key1=P3^2; //倒計(jì)時(shí)開關(guān) sbit key2=P3^0; //1 sbit key3=P3^1; //2 sbit key4=P3^5; //復(fù)位開關(guān) void daojishi(void); void yihao(void); void erhao(void); void fuwei(void); void key_scan(void); uchar n,k,flag; void delay5ms() { uchar i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void delay10ms() { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } void main() { n=60; k=20; P22=0; P23=0; P1=0xff; TMOD=0x01; //T0用中斷定時(shí)1s,方式一 TH0=(65536-50000)/256; TL0=(65536-50000)%256; IE=0x8f; IT0=1; IT1=1; flag=0; while(1) { key_scan(); switch(flag) { case 1:daojishi();break; case 2:yihao();break; case 3:erhao();break; case 4:fuwei();break; } } } void t_0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; k--; if(k==0) { k=20; n--; if(n==0) { TR0=0; P23=1; P0=0xff; } } } void key_scan() { if(key1==0) { delay10ms(); if(key1==0) { flag=1; while(key1==1) { delay10ms(); flag=0; } } } if(key2==0) { delay10ms(); if(key2==0) { flag=2; while(key2==1) { delay10ms(); flag=0; } } } if(key3==0) { delay10ms(); if(key3==0) { flag=3; while(key3==1) { delay10ms(); flag=0; } } } if(key4==0) { delay10ms(); if(key4==0) { flag=4; while(key4==1) { delay10ms(); flag=0; } } } } void daojishi() { TR0=1; P0=0xff; P20=1; P21=0; if(n>=10) P0=zixingma[n/10]; delay5ms(); P0=0xff; P20=0; P21=1; P0=zixingma[n%10]; delay5ms(); } void yihao() { P0=0xff; P1=0xf9; P22=1; } void erhao() { P0=0xff; P1=0xa4; P22=1; } void fuwei() { TR0=0; P2=0; P0=0xff; P1=0xff; n=60; } |
Powered by 單片機(jī)教程網(wǎng)