單片機(jī)設(shè)計(jì)LCD數(shù)字鐘(萬年歷)
單片機(jī)設(shè)計(jì)LCD數(shù)字鐘(萬年歷)程序與電路如下:
本文引用地址:http://www.ex-cimer.com/article/172587.htm#include
#include //庫函數(shù)頭文件,代碼中引用了_nop_()函數(shù)
// 定義控制信號端口
sbit RS=P2^4; //P2.4
sbit RW=P2^5; //P2.5
sbit E=P2^6; //P2.6
sbit set=P3^4; //設(shè)置鍵
sbit enter=P3^5; //確認(rèn)鍵
sbit add1=P3^6; //加1鍵
sbit sub1=P3^7; //減1鍵
bit k=0,f=0;//k為0表示運(yùn)行狀態(tài),k為1表示設(shè)置狀態(tài);f為0表示第一行顯示,f為1表示第二行顯示
char sec,min,hour,week,day,month,year,n,m;
unsigned char count,key;
unsigned char lcdd[]=0123456789;
/*聲明調(diào)用函數(shù)*/
void dispd(); //日期顯示函數(shù)
void dispt(); //時(shí)間顯示函數(shù)
unsigned char keys();//按鍵掃描函數(shù)
void lcd_w_cmd(unsigned char com); //寫命令字函數(shù)
void lcd_w_dat(unsigned char dat); //寫數(shù)據(jù)函數(shù)
unsigned char lcd_r_start(); //讀狀態(tài)函數(shù)
void int1(); //LCD初始化函數(shù)
void delay(unsigned char t); //可控延時(shí)函數(shù)
void delay1(); //軟件實(shí)現(xiàn)延時(shí)函數(shù),5個(gè)機(jī)器周期
/*主函數(shù)*/
void main()
{
TMOD=0x01; //設(shè)置為定時(shí)器模式1
TH0=0x3c; //晶振6MHz,定時(shí)時(shí)間100ms
TL0=0xb0;
IE=0x82; //開全局中斷和定時(shí)中斷
TR0=1; //啟動定時(shí)器
sec=0; //秒
min=0; //分
hour=0; //時(shí)
week=0; //星期
day=1; //日
month=1; //月
year=0; //年
count=0; //中斷次數(shù)清0
n=-3; //設(shè)置鍵按下次數(shù),第一行日期
m=-3; //設(shè)置鍵按下次數(shù),第二行時(shí)間
P0=0xff; // 送全1到P0口
int1(); // 初始化LCD
delay(255);
while(1)
{
key=keys(); //讀取按鍵
switch(key)
{
case 0xe0: //按下設(shè)置鍵
{
TR0=0;
k=1;
if(f==0)
{
n=n+3;
if(n==9)
{
n=0;
m=0;
f=1;
}
}
else
{
m=m+3;
if(m==12)
{
m=0;
n=0;
f=0;
}
}
if(f==0)
{
lcd_w_cmd(0x0d);
lcd_w_cmd(0x86+n);
}
else
{
lcd_w_cmd(0x0d);
lcd_w_cmd(0xc4+m);
}
} break;
評論