📄 lcd时钟.c
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BOOL bit
sbit remoteout=P3^2;
sbit rs = P1^0;
sbit rw = P1^1;
sbit ep = P1^2;
uchar temp,i,num;
uchar miaoge,miaoshi,fengge,fengshi,shige,shishi;
uchar code dis1[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//BYTE code dis2[]={0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6};
uchar code dis2[]={" Time to time "};
delay(uchar ms)
{ // 延时子程序
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
lcd_wcmd(uchar cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
lcd_pos(uchar pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}
lcd_wdat(uchar dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38); //功能设置
delay(1);
lcd_wcmd(0x0c); //显示开关控制
delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(1);
}
time()
{
if(temp==100)
{
temp=0;
miaoge++;
if(miaoge>=10)
{
miaoge=0;
miaoshi++;
if(miaoshi>=6)
{
miaoshi=0;
fengge++;
if(fengge>=10)
{
fengge=0;
fengshi++;
if(fengshi>=6)
{
fengshi=0;
shige++;
if(shige>=10)
{
shige=0;
shishi++;
if(shishi>2)
shishi=0;
}
}
}
}
}
}
lcd_pos(0X07); // 设置显示位置为第二行12区为秒个位
lcd_wdat(dis1[miaoge]);
lcd_pos(0X06); // 设置显示位置为第二行11区为秒十位
lcd_wdat(dis1[miaoshi]);
lcd_pos(0x05);
lcd_wdat(0x3a);
lcd_pos(0X04); // 设置显示位置为第二行的第9区为分个位
lcd_wdat(dis1[fengge]);
lcd_pos(0X03); // 设置显示位置为第二行的第8区为分十位
lcd_wdat(dis1[fengshi]);
lcd_pos(0x02);
lcd_wdat(0x3a);
lcd_pos(0X01); // 设置显示位置为第二行的第6区时十位
lcd_wdat(dis1[shige]);
lcd_pos(0X00); // 设置显示位置为第二行的第5区时个位
lcd_wdat(dis1[shishi]);
}
main()
{ EA=1;
EX0=1;
TMOD=0X01;
TH1=0X4c;
TL1=0x00;
ET1=1;
TR1=1;
lcd_init(); // 初始化LCD
delay(10);
while(1)
{
time();
}
}
void int0(void) interrupt 0
{
num++;
P0=~P0;
}
void time1(void) interrupt 3
{ ET1=0;
TR1=0;
TH1=0X4c;
TL1=0X00;
TR1=1;
temp++;
ET1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -