📄 1602串.c
字号:
//1602串口显示不需判别忙信号//
#include"AT89X51.H"
#define uchar unsigned char
#define ufloat unsigned float
sbit LCD_RS=P0^0;
sbit LCD_RW=P0^1;
sbit LCD_E=P0^2;
sbit CLK=P0^3;
sbit Clear=P0^4;
sbit LCD_Data=P0^5;
char a[]={'1','q','w','e','f','s','c','f','s','c','v'};
char b[]={'0','1','2','3','4','5','6','7','8','9'};
int h,m,s,count=1;
void delay(unsigned char time)
{
uchar i,k;
for(i=time;i>0;i--)
for(k=248;k>0;k--) ;
}
/////将一个字节转换成数据流/////////////
void TransBit(uchar WCLCD) //char->bit
{
int i;
// CLK=0;
Clear=1; //CLK上升沿时输出全为零
for(i=0;i<8;i++) //数据流处理
{
LCD_Data=WCLCD&0x80;
CLK=0; ////CLK下降沿时读取数据
delay(2);
CLK=1;
WCLCD<<=1;
}
}
////////写指令////////
void WriteCommandLCD(uchar WDLCD)
{
TransBit(WDLCD);
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_E=0;
LCD_E=1;
}
////////写数据////////
void WriteDataLCD(uchar WDLCD)
{
TransBit(WDLCD);
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
LCD_E=0;
LCD_E=1;
}
/////按指定位置显示一个字符X不能大于15,Y不能大于1/////
void DisplayOneChar(uchar X,uchar Y,uchar Num)
{
Y&=0x01;
X&=0x0F; //限制X不能大于15,Y不能大于1
if(Y) X+=0xc0; //当要显示第二行时地址码+0xc0;
else X+=0x80;
WriteCommandLCD(X); //发送地址码
WriteDataLCD(Num);
}
/////按指定位置显示一串字符/////
void DisplayListChar(uchar X,uchar Y,uchar *DData)
{
uchar ListLength;
ListLength=0;
while(DData[ListLength]>0x20) //若到达字串尾则退出
{
if(X<=15) //X坐标应小于15
{
DisplayOneChar(X,Y,DData[ListLength]); //显示单个字符
ListLength++;
++X;
}
}
}
///显示数字////
void DisplayNumChar(uchar X,uchar Y,int Num,char length)
{
char i;
int e=1,num;
num=Num;
for(i=0;i<length-1;i++)
{
e*=10;
}
for(i=0;i<length;i++)
{
if(X<=15)
{
DisplayOneChar(X,Y,b[(num/e)]);
X++;
num-=(num/e)*e;
e/=10;
}
}
}
//////显示光标程序////////
void LocateXY(uchar X,uchar Y)
{ uchar temp;
Y&=0x01;
X&=0x0F; //限制X不能大于15,Y不能大于1
if(Y) X+=0xc0; //当要显示第二行时地址码+0xc0;
else X+=0x80;
temp=X;
WriteCommandLCD(temp);
}
void LCDInit(void) //LCM初始化
{
delay(3);
WriteCommandLCD(0x38); //显示模式设置
delay(3);
WriteCommandLCD(0x38);
delay(3);
WriteCommandLCD(0x38);
delay(3);
WriteCommandLCD(0x38);
delay(3);
WriteCommandLCD(0x0f);//整体显示的开,光标开,光标是否闪烁,
delay(3);
WriteCommandLCD(0x01);
delay(3);
WriteCommandLCD(0x06);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
EA=1;
TR0=1;
LCDInit();
CLK=1;
DisplayListChar(8,1,"time");
DisplayOneChar(1,0,':');
DisplayOneChar(13,0,':');
LocateXY(12,1);
while(1);
}
void t0(void) interrupt 1 using 0
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
// DisplayListChar(8,1,"time");
// DisplayOneChar(10,0,':');
// DisplayOneChar(13,0,':');
count++;
if(count==1000)
{
s++;
count=1;
if(s==59)
{
m++;
s=0;
if(m==59)
{
h++;
m=0;
if(h==12)
h=0;
}
}
DisplayNumChar(8,0,h,2);
DisplayNumChar(11,0,m,2);
DisplayNumChar(14,0,s,2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -