欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于LCD1602的萬年歷單片機源碼 帶鬧鐘
[打印本頁]
作者:
yc123
時間:
2018-1-26 12:35
標題:
基于LCD1602的萬年歷單片機源碼 帶鬧鐘
基于LCD1602的萬年歷,帶鬧鐘
單片機源程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcd_rs=P2^6; //rs為寄存器選擇 高電平時選擇數據寄存器,低電平選擇指令寄存器
sbit lcd_rw=P2^5; //R/W 為讀寫信號線,高電平時進行讀操作,低電平進行寫操作
//當 RS 和 R/W 共同為低電平時,可以寫入指令或顯示地址
sbit lcd_en=P2^7; //液晶控制端
sbit key_set=P1^4;//設置鍵
sbit key_up=P1^5; //加鍵同時也是鬧鐘能夠停止按鈕
sbit key_down=P1^6; // 減鍵同時也是翻屏按鈕
sbit key_out=P1^7; //鍵 盤控制端口
uchar count; //定時器計數變量
uchar hour,min,sec,hour1,hour2,sec1,sec2,min1,min2; //時間變量
uchar yue, ri,nian1, nian2, nian3, nian4, yue1, yue2, ri1, ri2; //月日變量
uint nian; // 年變量
uchar nao1=0, nao2=0, nao3=0, nao11, nao12, nao21, nao22; //設置鬧鐘變量
uchar count1; // 星期計數變量
uchar ww=0,qq=0,nao=1,flag; //計數變量鍵盤設置端口,鬧鐘時間是否設置標志量,鬧鐘標志變量,設置鍵標志量
uchar code table[]={
0x00,0x04,0x0E,0x0E,0x0E,0x0E,0x1F,0x1F,
0x04,0x08,0x00,0x1E,0x00,0x08,0x04,0x00
};//設置鬧鐘圖片
void lcd_delay(uint m) //延時函數 (字符型變量m定義)
{
while(m--); //無限循環體
}
void read1602() //忙檢測 作用防止亂碼
{
uchar i;
i=254;
P0=0xff; //
lcd_rs=0; //讀寫命令
lcd_rw=1; //讀命令/數據
lcd_en=1; //液晶模塊執行命令
while(i--);//若一段時間以后仍低,則認為是不忙
lcd_en=0;
}
void write1602(uchar wdata,bit rw)//向LCD1602寫數據(rw=1)或者命令(rw=0)
{
read1602(); //防止數據丟失
lcd_rs=rw;
P0=wdata;
lcd_rw=0;
lcd_delay(1);
lcd_en=1;
lcd_delay(1);
lcd_en=0;
}
void lcd_init() //LCD1602液晶的初始化
{
lcd_delay(1500);
write1602(0x38,0); //置功能,8位數據,2行顯示,5x7字符(指令6)
write1602(0x0c,0); //只打開屏顯 (指令4)
write1602(0x06,0); //左到右顯示,自加1 (指令3)
write1602(0x01,0); //清屏 (指令1)
write1602(0x80,0); //(指令8)
}
void init() //定時器初始化
{
count=0;
hour=23; //小時初值
min=59; //分鐘初值
sec=50; //秒初值
nian=2018; //年初值
yue=01; //月初值
ri=01; //日初值
count1=1;//星期初值
TMOD=0x01; //中斷T0工作方式,方式1,16位定時器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //計數器初值,為50ms進入一次中斷子程序
TR0=1; //允許T0計數
ET0=1; //定時器T0溢出中斷允許
EA=1; //開中斷
}
void lcd_printf(uchar *str)//顯示字符串
{ read1602();
while(*str!='\0')
{
write1602(*str,1); //寫入數據
str++;
lcd_delay(1);
}
}
void lcd_moveto(uchar x,uchar y)//指定顯示的行列坐標
{
if(x==0)
write1602(0x80|y,0);
if(x==1)
write1602(0xc0|y,0);
}
void fengjie1(uchar a,uchar b, uchar c )//將時分秒兩位數分解為兩個數
{
hour1=a/10;
hour2=a%10;
min1=b/10;
min2=b%10;
sec1=c/10;
sec2=c%10;
}
void fengjie2(uint a,uchar b, uchar c ) //將年月日分解為兩個數
{
nian4=a%10;
a=(a-nian4)/10;
nian3=a%10;
a=(a-nian3)/10;
nian2=a%10;
nian1=a/10;
yue1=b/10;
yue2=b%10;
ri1=c/10;
ri2=c%10;
}
void fengjie3(uchar a, uchar b )//將鬧鐘分解為兩個數
{
nao11=a/10;
nao12=a%10;
nao21=b/10;
nao22=b%10;
}
void display1(uchar hour1,uchar hour2,uchar min1,uchar min2,uchar sec1,uchar sec2) //顯示時間程序
{
lcd_moveto(1,0); //定位在第二行第一列
write1602(hour1+48,1); //字符0-9對應十進制48-57
write1602(hour2+48,1);
lcd_printf(":");
write1602(min1+48,1);
write1602(min2+48,1);
lcd_printf(":");
write1602(sec1+48,1);
write1602(sec2+48,1);
}
void display2(uchar nian1,uchar nian2,uchar nian3,uchar nian4,uchar yue1,uchar yue2, uchar ri1, uchar ri2 ) //顯示日期程序
{
lcd_moveto(0,0); //定位在第一行第一列
write1602(nian1+48,1);
write1602(nian2+48,1);
write1602(nian3+48,1);
write1602(nian4+48,1);
lcd_printf("-");
write1602(yue1+48,1);
write1602(yue2+48,1);
lcd_printf("-");
write1602(ri1+48,1);
write1602(ri2+48,1);
}
void display3(uchar we) //星期送顯示
{
lcd_moveto(0,12);
switch(we)
{
case 1: lcd_printf("M");
lcd_printf("0");
lcd_printf("N");
break;
case 2: lcd_printf("T");
lcd_printf("U");
lcd_printf("E");
break;
case 3: lcd_printf("W");
lcd_printf("E");
lcd_printf("D");
break;
case 4: lcd_printf("T");
lcd_printf("H");
lcd_printf("U");
break;
case 5: lcd_printf("F");
lcd_printf("R");
lcd_printf("T");
break;
case 6: lcd_printf("S");
lcd_printf("A");
lcd_printf("T");
break;
case 7: lcd_printf("S");
lcd_printf("U");
lcd_printf("N");
break;
}
}
void display4(uchar nao11,uchar nao12,uchar nao21, uchar nao22) //顯示鬧鐘時刻
{
lcd_moveto(1,6); //定位在第二行第6列
if(nao==1) //打開鬧鐘
{write1602(nao11+48,1);//顯示鬧鐘時間
write1602(nao12+48,1);
lcd_printf(":");
write1602(nao21+48,1);
write1602(nao22+48,1);
}
if(nao==0) //關閉鬧鐘
{lcd_printf("N");
lcd_printf("O");
lcd_printf(":");
lcd_printf("N");
lcd_printf("O");
}
}
void display5() //顯示鬧鐘圖片
{
lcd_moveto(1,13);
if(nao==1)//如果鬧鐘打開顯示鬧鐘圖片
{
write1602(0x00,1); //
write1602(0x01,1); //?
}
if(nao==0)
{
lcd_printf(" ");
lcd_printf(" ");
}
}
void zimo() //字模顯示
{
uint i;
write1602(0x40,0); //寫圖片的指令
for(i=0;i<16;i++)
{
write1602(table[i],1);
}
}
void key() //鍵盤程序
{
if(key_set==0)
{
flag=1;
ww++;
if(ww==8)
ww=0;
while(!key_set);
}
switch(ww)
{
case 0: // 清零
if(key_up==0)
{
while(!key_up);
if(qq==1)
{
qq=0;
}
else
{
nao=!nao; //開關鬧鐘的作用
} }
break;
case 1: //鍵盤調整年
lcd_delay(1000);
lcd_moveto(0,3);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up); //按鍵是否抬起
nian++;
}
if(key_down==0)
{
while(!key_down);
nian--;
}
break;
case 2: //鍵盤調整月
lcd_delay(1000);
lcd_moveto(0,6);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
yue++;
if(yue>12)
yue=1;
}
if(key_down==0)
{
while(!key_down);
if(yue==1)
yue=12;
else
yue--;
}
break;
case 3: //鍵盤調節日期
lcd_delay(1000);
lcd_moveto(0,9);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
ri++;
if(ri>31)
ri=1;
}
if(key_down==0)
{
while(!key_down);
if(ri==1)
ri=31;
else
ri--;
}
break;
case 4: //鍵盤調整星期
lcd_delay(1000);
lcd_moveto(0,12);
lcd_printf("-");
lcd_printf("-");
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
count1++;
if(count1>7)
count1=1;
}
if(key_down==0)
{
while(!key_down);
if(count1==1)
count1=7;
else
count1--;
}
break;
case 5: //鍵盤調整時
lcd_delay(1000);
lcd_moveto(1,1);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
hour++;
if( hour>23)
hour=0;
}
if(key_down==0)
{
while(!key_down);
if( hour==0)
hour=23;
else
hour--;
}
break;
case 6: //鍵盤調整分
lcd_delay(1000);
lcd_moveto(1,4);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
min++;
if( min>59)
min=0;
}
if(key_down==0)
{
while(!key_down);
if( min==0)
min=59;
else
min--;
}
break;
case 7: //鍵盤調整秒
lcd_delay(1000);
lcd_moveto(1,7);
lcd_printf("-");
lcd_delay(1000);
if(key_up==0)
{
while(!key_up);
sec++;
if( sec>59)
sec=0;
}
if(key_down==0)
{
while(!key_down);
if(sec==0)
sec=59;
else
sec--;
}
break;
}
if(key_out==0)
{
while(!key_out);
flag=0;
ww=0;
}
}
void key1() // 調整鬧鐘時間
{
if(key_set==0)
{
flag=1;
ww++;
if(ww==3)
ww=0;
while(!key_set);
}
switch(ww)
{
case 0: //退出設置
if(key_up==0)
{
while(!key_up);
nao=!nao; //如果鬧鐘開按下后則關,反之同理
}
if(key_down==0)
{
while(!key_down);
qq=0; //
}
break;
case 1: // 調試鬧鐘的時
lcd_delay(1000);
lcd_moveto(1,7);
lcd_printf("-");
lcd_delay(1000);
if(nao==1)
{if(key_up==0)
{
while(!key_up);
nao1++;
if( nao1>23)
nao1=0;
}
if(key_down==0)
{
while(!key_down);
if( nao1==0)
nao1=23;
else
nao1--;
}
break;
}
else break;
case 2: // 調試鬧鐘的分
lcd_delay(1000);
lcd_moveto(1,10);
lcd_printf("-");
lcd_delay(1000);
if(nao==1)
{if(key_up==0)
{
while(!key_up);
nao2++;
if( nao2>59)
nao2=0;
}
if(key_down==0)
{
while(!key_down);
if( nao2==0)
nao2=59;
else
nao2--;
}
break;
}
else break;
default:break;
}
if(key_out==0)
{
while(!key_out);
flag=0;
ww=0;
}
}
void count0(void) interrupt 1 //中斷函數,進行時期的累加 12m晶振
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20) //計時到達一秒
{
count=0;
sec++;
if(sec==60) //計時到達一分
{
sec=0;
min++;
if(min==60) //計時到達一小時
{
min=0;
hour++;
if(hour==24) //計時到達一天
{
hour=0;
ri++;
count1++;
if(count1==8) //計時到達一周
{
count1=1;
}
if(yue==1|yue==3|yue==5|yue==7|yue==8|yue==10|yue==12)
{
if(ri>31) //計時到達一個月31天
{
ri=1;
yue++;
if(yue>12) //計時到達一年
{
yue=1;
nian++;
}
}
}
if(yue==4|yue==6|yue==9|yue==11)
{
if(ri>30) //計時到達一個月30天
{
ri=1;
yue++;
if(yue>12) //計時到達一年
{
yue=1;
nian++;
}
}
}
if(yue==2)
{
if(nian%4==0)
{
if(ri>29)//計時到達一個月29天
{
ri=1;
yue++;
if(yue>12)
{
yue=1;
nian++;
}
}
}
else
{
if(ri>28) //計時到達一個月28天
{
ri=1;
yue++;
if(yue>12)
{
yue=1;
nian++;
}
}
}
}
}
}
}
}
}
void linsheng() //鬧鐘發生器
{ if(nao==1)
{if(hour==nao1&min==nao2&sec==nao3)//滿足時間?
qq=1;//是否設置鬧鐘時間
if(qq==1)
{
key_out=0;
lcd_delay(10000);
key_out=1;
lcd_delay(1000);
}
}
}
void main()
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建文件夾.rar
(47.06 KB, 下載次數: 44)
2018-1-26 12:34 上傳
點擊文件名下載附件
基于LCD1602的萬年歷
下載積分: 黑幣 -5
作者:
wang先生
時間:
2020-1-11 16:33
這個鬧鐘訂好時間后,好像不響啊!
作者:
wang先生
時間:
2020-1-11 16:34
鬧鐘定好時間后,好像不響啊! 難受😫
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1