📄 1602.c
字号:
#include <C8051f310.h>
#define SYSCLK 24500000
#define std 65536-1*(SYSCLK/12000) //初值1ms
#define uchar unsigned char
#define uint unsigned int
sbit LCM_RS = P2^0;
sbit LCM_RW = P2^1;
sbit LCM_E = P2^2;
uchar sec,minu; //定义分钟和秒
uint count;
uchar xdata table[]="Used time: ";
//=============================子程序声明
void delay(uint z);
void init(void);
void write_data(uchar date);
void write_com(uchar com);
void disp(void);
void lcd_init();
void timer0_init(void) ;
void init()
{
OSCICN=0x83;
CLKSEL=0x00;
PCA0MD &= ~0x40;
PCA0MD= 0x00;
XBR0=0x00;
XBR1=0x40;
//P2MDIN |=0xee;
P2MDOUT |=0x07;
//P0MDIN |=0x0f;
P0MDOUT |=0x00;
}
void delay(uint z) //延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=300;y>0;y--);
}
void write_com(uchar com) //写命令
{
delay(10);
LCM_RS=0;
LCM_RW=0 ;
LCM_E=0;
P0=com;
delay(5);
LCM_E=1;
delay(5);
LCM_E=0;
}
void write_data(uchar date) //写数据
{
delay(10);
LCM_RS=1;
LCM_RW=0;
LCM_E=0;
P0=date;
delay(5);
LCM_E=1;
delay(5);
LCM_E=0;
}
void lcd_init() //lcd初始化
{
delay(10);
write_com(0x38);
write_com(0x06); //Mode set 显示右移
write_com(0x0c); //开屏幕,开光标,不闪烁
write_com(0x01); //清屏
delay(5);
}
void disp(void)
{ unsigned char i,a,b,c,d;
a=minu/10;
b=minu%10;
c=sec/10;
d=sec%10;
write_com(0x80);
while(table[i] != '\0')
{
write_data(table[i]);//显示字符
i++;
}
write_com(0x8b);
write_data(0x30+a);
write_data(0x30+b);
write_data(':');
write_data(0x30+c);
write_data(0x30+d);
}
void timer0_init(void)
{
CKCON=0x00; //使用系统时钟不分频
//TMOD&=~0x0f;
TMOD=0x01; //16位定时方式
TL0= std;
TH0=std>>8; //定时1ms
ET0=1;
TR0=0;
}
//=============================//主程序
void main(void)
{
init();
lcd_init();
timer0_init();
TR0=1;
EA=1;
while(1)
{
disp( );
}
}
void timer0_isr(void) interrupt 1 using 0
{
TF0=0;
TL0+=std;
TH0=std>>8; //重装初值
count++;
if(count==1000)
{count=0;
sec++;
if(sec==60)
{sec=0;
minu++;
if(minu==60)
minu=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -