標(biāo)題:
單片機(jī)LCD1602顯示的定時(shí)鬧鐘程序
[打印本頁]
作者:
zhouzhikun
時(shí)間:
2020-2-29 14:52
標(biāo)題:
單片機(jī)LCD1602顯示的定時(shí)鬧鐘程序
#include<reg51.h>
#include<lcd1602.h>
#define uchar unsigned char
#define uint unsigned int
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit buzzer=P2^5;
sbit relay=P2^3;//buzzer & relay均為低電平工作
sbit led=P2^4;
sbit lamp=P2^5;
uchar code date[]=" H.I.T. CHINA ";
uchar code time[]=" ALARM 23:58 ";
uchar code bell[]=" ALARM : ";
uchar second=40,minute=58,hour=23,counter=0;
uchar bellminute=0,bellhour=0;
uchar buzzerflag,clockflag;//若標(biāo)志為1,則工作
void ledshow()//led閃爍,標(biāo)示程序開始運(yùn)轉(zhuǎn)
{
uchar i;
for(i=0;i<=100;i++)
{
led=~led;
delay(5);
}
}
uchar keyscan()//鍵盤掃描
{
uchar keyvalue,temp;
keyvalue=0;
P1=0xff;
temp=P1;
if(~(P1&temp))
{
switch(temp)
{
case 0xfe:
keyvalue=1;
break;
case 0xfd:
keyvalue=2;
break;
case 0xfb:
keyvalue=3;
break;
case 0xf7:
keyvalue=4;
break;
default:
keyvalue=0;
break;
}
}
return keyvalue;
}
void clock_init()//lcd時(shí)鐘寫入初始化
{
uchar i,j;
for(i=0;i<16;i++)
{
write_data(date[i]);[/i][i]
}
write_com(0x80+0x40);
for(j=0;j<16;j++)
{
write_data(time[j]);
}
}
void timer0_init()//中斷初始化
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xd8;//每10m中斷一次
TL0=0xf0;
TR0=1;
}
void clock_write()//時(shí)鐘實(shí)時(shí)寫入
{
write_sfm(0x49,hour);
write_sfm(0x4c,minute);
}
void key_menu()//總鍵盤掃描函數(shù)
{
unsigned char keyvalue_menu=0,keyvalue_change=0,i,j;
keyvalue_menu=keyscan();
if(keyvalue_menu)
{
if(keyvalue_menu==1)//按鍵1,走時(shí)停止,開始更改時(shí)鐘值
{
while(~key0);//防抖
TR0=0;
do{
keyvalue_change=keyscan();
if(keyvalue_change==1)//按下1鍵,更改小時(shí)
{
while(~key0);
if(hour<23)
{
hour++;
}
else
{
hour=0;
}
}
else if(keyvalue_change==2)//按下2鍵,更改分鐘
{
while(~key1);
if(minute<59)
{
minute++;
}
else
{
minute=0;
}
}
else if(keyvalue_change==4)//按下4鍵,更改響鈴方式
{
while(~key3);
buzzerflag=~buzzerflag;
if(buzzerflag)//鬧鈴運(yùn)轉(zhuǎn),3聲
{
buzzer=0;
delay(100);
buzzer=1;
delay(100);
buzzer=0;
delay(100);
buzzer=1;
delay(100);
buzzer=0;
delay(100);
buzzer=1;
delay(100);
}
else//鬧鈴關(guān)閉,1聲
{
buzzer=0;
delay(100);
buzzer=1;
delay(100);
}
}
write_sfm(0x49,hour);
write_sfm(0x4c,minute);
}while(keyvalue_change!=3);//按下3鍵,從新開始走時(shí)
while(~key2==0);
TR0=1;//調(diào)整時(shí)間后從新開始走時(shí)
}
else if(keyvalue_menu==2)//按鍵2,走時(shí)繼續(xù),顯示鬧鐘值
{
while(~key1);//防抖
do{
for(i=0;i<16;i++)
{
write_data(date[i]);[/i][i]
}
write_com(0x80+0x40);
for(j=0;j<16;j++)
{
write_data(bell[j]);
}
write_sfm(0x49,bellhour);
write_sfm(0x4c,bellminute);
keyvalue_change=keyscan();
}while(keyvalue_change!=3);//未完成設(shè)置前始終顯示當(dāng)前鬧鐘
while(~key2);
}
else if(keyvalue_menu==3)//按鍵3,走時(shí)繼續(xù),設(shè)置鬧鐘值
{
while(~key2);
do{
if(keyvalue_change==1)//按下1鍵,更改小時(shí)
{
while(~key0);
if(bellhour<23)
{
bellhour++;
}
else
{
bellhour=0;
}
}
else if(keyvalue_change==2)//按下2鍵,更改分鐘
{
while(~key1);
if(bellminute<59)
{
bellminute++;
}
else
{
bellminute=0;
}
}
else if(keyvalue_change==4)//按下4鍵,更改響鈴方式
{
while(~key3);
buzzerflag=~buzzerflag;
if(buzzerflag)//鬧鈴運(yùn)轉(zhuǎn),3聲
{
buzzer=0;
delay(100);
buzzer=1;
delay(100);
buzzer=0;
delay(100);
buzzer=1;
delay(100);
buzzer=0;
delay(100);
buzzer=1;
delay(100);
}
else//鬧鈴關(guān)閉,1聲
{
buzzer=0;
delay(100);
buzzer=1;
delay(100);
}
}
for(i=0;i<16;i++) //實(shí)時(shí)顯示修改結(jié)果
{
write_data(date[i]);[/i][i]
}
write_com(0x80+0x40);
for(j=0;j<16;j++)
{
write_data(bell[j]);
}
write_sfm(0x49,bellhour);
write_sfm(0x4c,bellminute);
keyvalue_change=keyscan();
}while(keyvalue_change!=3);//按下3鍵,重新開始顯示走時(shí)
while(~key2);//防抖
}
else if(keyvalue_menu==4)//按鍵4,關(guān)閉/開啟鬧鐘
{
while(~key2);
clockflag=!clockflag;
if(clockflag)//鬧鐘運(yùn)轉(zhuǎn),3聲
{
[color=#f4a460] buzzer=0;[/color]
[color=#f4a460] delay(100);[/color]
[color=#f4a460] buzzer=1;[/color]
[color=#f4a460] delay(100);[/color]
[color=#f4a460] buzzer=0;[/color]
[color=#f4a460] delay(100);[/color]
[color=#f4a460] buzzer=1;[/color]
[color=#f4a460] delay(100);[/color]
[color=#f4a460] buzzer=0;[/color]
[color=#f4a460] delay(100);[/color]
[color=#f4a460] buzzer=1;[/color]
[color=#f4a460] delay(100);[/color]
}
else//鬧鐘關(guān)閉,1聲
{
buzzer=0;
delay(100);
buzzer=1;
delay(100);
}
}
}
}
void alarm_clock()
{
if((minute==bellminute)&&(hour==bellhour)&&(clockflag))//鬧鐘打開且達(dá)到預(yù)設(shè)時(shí)間時(shí)啟動(dòng)鬧鐘
{
if(buzzerflag)//如果鬧鈴打開
{
relay=0;
buzzer=0;
}
else
{
relay=0;
buzzer=1;
}
}
else
{
relay=1;
buzzer=1;
}
}
void main()
{
ledshow();//程序啟動(dòng),led閃爍
init1602();//lcd初始化
clock_init();//時(shí)鐘初始化
timer0_init();//中斷初始化
while(1)
{
clock_write();
key_menu();
alarm_clock();
}
}
void timer0() interrupt 1
{
if(counter<100) //判斷時(shí)間變換問題
{
counter++;
}
else
{
counter=0;
led=~led;
if(second<59)
{
second++;
}
else
{
second=0;
if(minute<59)
{
minute++;
}
else
{
minute=0;
if(hour<23)
{
hour++;
}
else
{
hour=0;
}
}
}
}
TH0=0xd8;//重新加載中斷值
TL0=0xf0;
TR0=1;
}
復(fù)制代碼
51hei截圖20200229145150.png
(57.96 KB, 下載次數(shù): 65)
下載附件
2020-2-29 14:52 上傳
2-36 LCD顯示的定時(shí)鬧鐘
作者:
愛羅8
時(shí)間:
2020-10-12 23:48
程序運(yùn)行出錯(cuò)了~
作者:
曹大歡哎
時(shí)間:
2021-1-8 10:19
這個(gè)L1 12V的在哪里的啊,我找了一遍沒看到,博主看到回復(fù)一下我唄,我們要做設(shè)計(jì)。。
作者:
曹大歡哎
時(shí)間:
2021-1-8 10:20
那個(gè)L112V的元器件在哪里啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1