|
本帖最后由 2842687945 于 2014-9-13 20:09 編輯
#include "reg52.h"
typedef unsigned int uint16;
typedef unsigned char uint8;
uint16 H = 23,M = 0,S = 0,j = 0,x = 0;//初始化
uint8 code time[5] = {"time:"};
sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
//延時函數
void delay(uint16 k)
{
uint16 i;
for(i = 0;i < k;i++);
}
//寫LCD1602的命令
void write_com(uint8 com)
{
RS = 0;
RW = 0;
P0 = com;
E = 0;
delay(20);
E = 1;
}
//寫LCD1602的數據
void write_date(uint8 date)
{
RS = 1;
RW = 0;
P0 = date;
E = 0;
delay(20);
E = 1;
}
//LCD1602的初始化
void init(void)
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
//主程序
void main(void)
{
init();
TMOD = 0x01;//設置定時器0的工作方式為1
TH0 = 0xdc;
TL0 = 0x00;
ET0 = 1;
EA = 1;
TR0 = 1;
while(1)
{
write_com(0x80);
for(x = 0;x < 5;x++)
{
write_date(time[x]);
}
write_com(0x80+0x05);//時的十位顯示的位置
write_date((H/10)+'0');//時的十位顯示的內容
write_com(0x80+0x06);//時的個位顯示的位置
write_date((H%10)+'0');//時的個位顯示的內容
write_com(0x80+0x07);//‘:’顯示的位置
write_date(':');//‘:’顯示的內容
write_com(0x80+0x08);//分的十位顯示的位置
write_date((M/10)+'0');//分的十位顯示的內容
write_com(0x80+0x09);//分的個位顯示的位置
write_date((M%10)+'0');//分的個位顯示的內容
write_com(0x80+0x0A);//‘:’顯示的位置
write_date(':');//‘:’顯示的內容
write_com(0x80+0x0B);//秒的十位顯示的位置
write_date((S/10)+'0');//秒的十位顯示的內容
write_com(0x80+0x0C);//秒的個位顯示的位置
write_date((S%10)+'0');//秒的個位顯示的內容
}
}
//定時器0中斷服務子函數
void TIME0(void) interrupt 1//10MS中斷一次
{
TH0 = 0xdc;//重新賦值
TL0 = 0x00;
j++;
if(j==100)
{
j = 0;
S++;
if(S==60)
{
S = 0;
M++;
if(M==60)
{
M = 0;
H++;
if(H==24)
{
H = 0;
}
}
}
}
}
|
評分
-
查看全部評分
|