欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機LED時鐘無法進行第二次功能設置
[打印本頁]
作者:
深情不是舔
時間:
2019-6-30 16:46
標題:
單片機LED時鐘無法進行第二次功能設置
第四次開始按下kgnxz后,調整秒分時沒有反應,是不是要加清零,我在鍵盤掃描的最后加過,沒反應
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
sbit kgnxz=P3^0; //功能選擇鍵,按一次設定時間,按兩次設定鬧鐘時間,按三次又顯示時間表
sbit ksec=P3^1;//調整秒
sbit kmin=P3^2;//調整分
sbit khour=P3^3;//調整時
sbit kzh=P3^4;//24與12小時制轉換
sbit bear=P1^0;//蜂鳴器控制口
unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0,flag=0,//flag是按鍵的計數
secshi1=0,secge1=0,minshi1=0,minge1=0,hourshi1=0,hourge1=0;//定義存儲時間和鬧鐘時分秒的個位和十位
unsigned int num=0,sec=0,min=0,hour=0,sec1=30,min1=0,hour1=1, num1=0;//定義時間和鬧鐘的時分秒
unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管段控口
void keyscan();//鍵盤掃描函數
void display();//時鐘顯示函數
void display1();//鬧鐘顯示函數
void clock();//鬧鐘函數即蜂鳴器函數
/***延時函數****/
void delay(unsigned char z)
{unsigned char x,y;
for(x=z;x>0;x--)
for(y=255;y>0;y--);
}
/***中斷函數****/
void time0() interrupt 1
{num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(num==20)
{num=0;
sec++;
if(sec==60)
{sec=0;
min++;
if(min==60)
{min=0;
hour++;
if(hour==24)
{hour=0;
}
}
}
display(); }
}
/******時鐘顯示函數******/
void display()
{
secge=sec%10;
secshi=sec/10;
minge=min%10;
minshi=min/10;
hourge=hour%10;
hourshi=hour/10;
P2=0xfe;
P0=table[secge];
delay(5);
P2=0xfd;
P0=table[secshi];
delay(5);
P2=0xfb;
P0=0x40;
delay(5);
P2=0xf7;
P0=table[minge];
delay(5);
P2=0xef;
P0=table[minshi];
delay(5);
P2=0xdf;
P0=0x40;
delay(5);
P2=0xbf;
P0=table[hourge];
delay(5);
P2=0x7f;
P0=table[hourshi];
delay(5);
}
/*****鬧鐘顯示函數****/
void display1()
{
secge1=sec1%10;
secshi1=sec1/10;
minge1=min1%10;
minshi1=min1/10;
hourge1=hour1%10;
hourshi1=hour1/10;
P2=0xfe;
P0=table[secge1];
delay(10);
P2=0xfd;
P0=table[secshi1];
delay(15);
P2=0xfb;
P0=0x40;
delay(15);
P2=0xf7;
P0=table[minge1];
delay(15);
P2=0xef;
P0=table[minshi1];
delay(15);
P2=0xdf;
P0=0x40;
delay(15);
P2=0xbf;
P0=table[hourge1];
delay(15);
P2=0x7f;
P0=table[hourshi1];
delay(15);
}
/*****鍵盤掃描********/
void keyscan()
{if(kgnxz==0) //功能選擇鍵是否按下
{ delay(10);//延時消抖
if(kgnxz==0)//再次判斷鍵是否按下
{flag++;} //計數,功能選擇鍵按鍵次數加一
while(!kgnxz);} //釋放鍵
if(flag==1)//功能選擇鍵
{if(ksec==0)//秒調整鍵
{delay(10);//延時消抖
if(ksec==0)//再次判斷鍵是否按下
{sec++;//秒加加
if(sec>=60)//如果秒大于60
sec=0;//秒清零
}
while(ksec==0)//釋放鍵
display();}
if(kmin==0)
{delay(100);
if(kmin==0)
{min++;
if(min>=60)
min=0;
}
while(kmin==0)
display();
}
if(khour==0)
{delay(100);
if(khour==0)
{hour++;
if(hour==24)
hour=0;
}
while(khour==0)
display();
}
}
if(flag==2)//鬧鐘調整
{if(ksec==0)
{delay(50);
if(ksec==0)
{sec1++;
if(sec1==60)
sec1=0;}
while(!ksec)
{display1();delay(50);}
}
if(kmin==0)
{delay(50);
if(kmin==0)
{min1++;
if(min1==60)
min1=0;}
while(!kmin)
{display1();}
}
if(khour==0)
{delay(50);
if(khour==0)
{hour1++;
if(hour1==24)
hour1=0;}
while(!khour)
{display1();} } }}
/*****蜂鳴器*********/
void clock()
{ unsigned int i;
for(i=1000;i>0;i--)
{bear=1;
P1=0xfe;
delay(10);
bear=0;
P1=0xff;
delay(10);}}
/*****24轉12小時制*********/
void to12()
{if(hour>=12)
{hour=hour-12;}
if(hour1>=12)
{hour1=hour1-12;}}
/*****主函數********/
main()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;TR0=1;
while(1)
{
keyscan();display();
if(flag==1) {keyscan(); display();}
if(flag==2) {keyscan(); display1();}
if(flag==3) {display();}
if((hour==hour1)&&(min==min1)&&(sec==sec1))
{clock();}//鬧鐘設定時間與時鐘時間相等,調用蜂鳴器函數
if(kzh==0){to12();}
}
}
復制代碼
作者:
wulin
時間:
2019-7-1 06:44
希望對你有所幫助
數碼管時鐘長短按調整點閃爍+鬧鐘仿真.zip
(118.54 KB, 下載次數: 11)
2019-7-1 06:44 上傳
點擊文件名下載附件
作者:
147258369q
時間:
2019-7-1 14:39
我感覺應該在kgnxz這個按鍵掃描里對flag進行范圍確認,即清零。可以試一下是否可行
作者:
深情不是舔
時間:
2019-7-2 12:01
wulin 發表于 2019-7-1 06:44
希望對你有所幫助
好的,謝謝哈
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1