標(biāo)題:
LCD1602可調(diào)式電子時鐘代碼
[打印本頁]
作者:
ljl6666
時間:
2021-4-14 22:34
標(biāo)題:
LCD1602可調(diào)式電子時鐘代碼
SC89C51
單片機源程序如下:
/* k1,k2,k3,k4分別接P3.0,P3.1,P3.2,P3.3
分別控制秒加,分加,時加,選擇確認端
先按k4進行時間調(diào)整選擇,調(diào)整好后在按下k4確認 */
//注意:LED點陣模塊的J1短接片要短接到VCC端
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit rs=P2^6; // 數(shù)據(jù)命令選擇
sbit rw=P2^5; //讀寫選擇
sbit e=P2^7; //使能
sbit k1=P3^0; //秒加
sbit k2=P3^1; //分加
sbit k3=P3^2; //時加
sbit k4=P3^3; //確定/選擇
uint8 a[]="LCD Design of Tm"; //要顯示的字符
uint8 num[]="0123456789";
uint8 b[8],shi,fen,miao;
uint8 timeset;
uint8 sum;
void delay(uint16 i)
{
while(i--);
}
void wrc(uint8 c) //寫命令
{
delay(1000);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(10);
e=0;
/*
P0=c<<4;
e=1;
e=0;*/ //四位的LCD要加上
}
void wrd(uint8 dat) //寫數(shù)據(jù)
{
delay(1000);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(10);
e=0;
/*
P0=dat<<4;
e=1;
e=0;*/ //四位的LCD要加上
rs=0;
}
void lcdinit()
{
delay(1000);
/* wrc(0x32);
wrc(0x28);
wrc(0x28); */ //四位的LCD要加上
wrc(0x38);
wrc(0x38);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
void time0init()
{
TMOD=0X01;
TH0=0XFC;
TL0=0X18; //1ms
TR0=1;
ET0=1;
EA=1;
}
void int0init()
{
EA=1;
EX0=1;
IT0=1;
}
void int1init()
{
EA=1;
EX1=1;
IT1=1;
}
void timepros()
{
b[0]=num[shi/10];
b[1]=num[shi%10];
b[2]=0x3a;
b[3]=num[fen/10];
b[4]=num[fen%10];
b[5]=0x3a;
b[6]=num[miao/10];
b[7]=num[miao%10];
}
void display()
{
uint8 i;
timepros();
wrc(0x00+0x80);
for(i=0;i<16;i++)
{
wrd(a[i]);
}
wrc(0x44+0x80);
wrd(b[0]);
wrd(b[1]);
wrd(b[2]);
wrd(b[3]);
wrd(b[4]);
wrd(b[5]);
wrd(b[6]);
wrd(b[7]);
}
void main()
{
lcdinit();
time0init();
int1init();
while(1)
{
if(timeset==1) //可以調(diào)整時間
{
if(k1==0) //秒設(shè)置
{
delay(1000);
if(k1==0)
{
miao++;
if(miao==60)miao=0;
}
while(!k1);
}
if(k2==0) //分設(shè)置
{
delay(1000);
if(k2==0)
{
fen++;
if(fen==60)fen=0;
}
while(!k2);
}
if(k3==0) //時設(shè)置
{
delay(1000);
if(k3==0)
{
shi++;
if(shi==60)shi=0;
}
while(!k3);
}
}
display();
}
}
void tim0() interrupt 1
{
static uint16 n;
TH0=0XFC;
TL0=0X18;//1ms
n++;
if(n==1000)
{
n=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==60)
{
shi=0;
miao=0;
fen=0;
}
}
}
}
}
void int1() interrupt 2
{
delay(1000);
if(k4==0)
{
sum++;
if(sum==1)
{
TR0=0;
timeset=1;
}
if(sum==2)
{
TR0=1;
timeset=0;
sum=0;
}
}
}
復(fù)制代碼
hex文件51hei提供下載:
可調(diào)式電子鐘設(shè)計.zip
(30.25 KB, 下載次數(shù): 12)
2021-4-14 22:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1