📄 lcd1602.c
字号:
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^1;
sbit lcden=P2^0;
sbit test = P1^0;
uchar table[] = "Cymometer";
uchar table1[] = "FR:";
uchar count;
uint fre, fre_tmp;
bit flag ;
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(20);
lcden=1;
delay(20);
lcden=0;
}
void write_data(unsigned char date)
{
P0=date;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void init()
{
write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
delay(20);
write_com(0x0f); //显示光标及闪烁设置
delay(20);
write_com(0x06); //读或写完一个字符后地址指针自动加1,光标地址加1
delay(20);
write_com(0x01); //清屏
delay(20);
}
void int0(void) interrupt 2 using 0
{
EA = 0;
fre_tmp++;
EA = 1;
}
void time0(void ) interrupt 1 using 1
{
EA = 0;
TR0 = 0;
if(count == 19 )
{
count=0;
fre = fre_tmp;
fre_tmp = 0;
TH0 = 0x4b;
TL0 = 0xff;
TR0 = 1;
flag = 1;
}
else
{
count++;
TH0 = 0x4b;
TL0 = 0xff;
TR0 = 1;
flag = 0 ;
}
EA = 1;
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
write_com(X); //这里不检测忙信号,发送地址码
write_data(DData);
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x20) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}
void main()
{
uchar i,timeflag;
uchar temp[4] ;
TMOD = 0x01;
TH0 = 0x4b;
TL0 = 0xff;
EA = 1;
EX1 = 1;IT1 = 1;
ET0 = 1;
TR0 =1;
init();
write_com(0x80);
delay(20);
// tmp = 1;
// sprintf(s,"F%dR",1 );
for(i=0; i<9; i++)
{
write_data(table[i]);
delay(20);
}
write_com(0xc0);
for(i=0; i<3; i++)
{
write_data(table1[i]);
delay(20);
}
while(1)
{
if(flag == 1)
{
test = !test;
//sprintf( temp, "%d", fre );
temp[0]=(fre/1000)|0x30;
temp[1]=(fre/100%10)|0x30;
temp[2]=(fre/10%10)|0x30;
temp[3]=(fre%10)|0x30;
DisplayOneChar(4,1,temp[0]);
DisplayOneChar(5,1,temp[1]);
DisplayOneChar(6,1,temp[2]);
DisplayOneChar(7,1,temp[3]);
}
//delay(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -