📄 led.c
字号:
#include <reg51.h>
#include <init.h>
void LCDInit(void);
void LCD_Write(unsigned char cmd);
void LCD_Write_Com(unsigned char com) ;
void LCD_Write_Dat(unsigned char dat) ;
unsigned char LCD_Read_Dat(unsigned char com);
extern void Delay(unsigned char i);
extern unsigned char Key_Scan(void);
extern unsigned char wc,wd2,wd1,wd0;
/************LCD初始化***********************/
void LCDInit(void)
{
E=1;
LCD_Write_Com(0x38);//8位数据总线,2行,5*7点阵
LCD_Write_Com(0x08);//关显示
Delay(2000);
LCD_Write_Com(0x0c);//开显示,关光标,不闪烁
LCD_Write_Com(0x01);//清屏
Delay(2000);
LCD_Write_Com(0x80);//
}
/*****************写的操作**************************/
void LCD_Write(unsigned char cmd)
{
unsigned char i;
for(i=0;i<13;i++); //>40us
LCD=cmd;
E=1;
for(i=0;i<3;i++);
E=0;
for(i=0;i<20;i++); //>40us
}
/********************读数据的操作****************************/
unsigned char LCD_Read_Dat(unsigned char com)
{
unsigned char i,j;
LCD_Write_Com(com);
RS=1;
RW=1;
for(i=0;i<13;i++);
E=1;
LCD=0xff; ////////////////////////////////读前先置1
j=LCD;
for(i=0;i<13;i++);
return j;
}
/***************读地址的操作************************/
unsigned char LCD_Read_Com(void)
{
unsigned char i,j;
RW=1;
RS=0;
for(i=0;i<13;i++);
E=1;
LCD=0xff;
j=LCD;
j=j|0x80;
for(i=0;i<13;i++);
return j;
}
/********************写指令****************************/
void LCD_Write_Com(unsigned char com)
{
RS=0;
RW=0;
LCD_Write(com);
}
/**********************写数据****************************/
void LCD_Write_Dat(unsigned char dat)
{
RS=1;
RW=0;
LCD_Write(dat);
}
void LCD_Write_Dat_Nmov(unsigned char dat)
{
unsigned char j;
LCD_Write_Dat(dat);
j=LCD_Read_Com();
LCD_Write_Com(--j);
}
/*********************开机显示****************************/
void LCD_Show1(void)
{
unsigned char i;
unsigned char ch1[]="****welcome!****";
unsigned char ch2[]="2000-01-01";
unsigned char ch3[]="00:00:00";
for(i=0;i<16;i++)
{
LCD_Write_Dat(ch1[i]);
}
Delay(250);
Delay(250);
Delay(250);
Delay(250);
Delay(250);
Delay(250);
LCDInit();
LCD_Write_Com(0x83);//DDRAM地址0x03
for(i=0;i<10;i++)
{
LCD_Write_Dat(ch2[i]); //LCD显示
}
LCD_Write_Com(0xc4);//DDRAM地址0x44
for(i=0;i<8;i++)
{
LCD_Write_Dat(ch3[i]); //LCD显示
}
LCD_Write_Com(0x83);//DDRAM地址0x03
LCD_Write_Com(0x0f);//开显示,开光标,闪烁
}
/*******************秒表函数****************************/
void Watch(void)
{
unsigned char i,j,m,n,a;
unsigned char ch3[]="00:00:00.00";
j=0xff;
a=0xff;
LCDInit();
LCD_Write_Com(0x80);
LCD_Write_Dat('W');
LCD_Write_Com(0xc4);
for(i=0;i<11;i++)
LCD_Write_Dat(ch3[i]);
while(1)
{
wc=0;wd2=0;wd1=0;wd0=0;
j=Key_Scan();
if(j=='7') //开始
{
TR1=1;
ET1=1; //打开定时器0中断
EA=1; //开总中断
m=wc;
while(1)
{
n=wc;
if(m!=n)
{
LCD_Write_Com(0xc4);
LCD_Write_Dat(wd0/10+'0');
LCD_Write_Com(0xc5);
LCD_Write_Dat(wd0%10+'0');
LCD_Write_Com(0xc7);
LCD_Write_Dat(wd1/10+'0');
LCD_Write_Com(0xc8);
LCD_Write_Dat(wd1%10+'0');
LCD_Write_Com(0xca);
LCD_Write_Dat(wd2/10+'0');
LCD_Write_Com(0xcb);
LCD_Write_Dat(wd2%10+'0');
LCD_Write_Com(0xcd);
LCD_Write_Dat(wc*5/10+'0');
LCD_Write_Com(0xce);
LCD_Write_Dat(wc*5%10+'0');
m=n;
}
a=Key_Scan();
if(a=='8') //暂停
{
TR1=0;
ET1=0;
}
if(a=='7')
{
TR1=1;
ET1=1;
}
if(a=='9')
{
TR1=0;
ET1=0;
wc=0;wd2=0;wd1=0;wd0=0;
}
if(a=='B')
{
TR1=0;
ET1=0;
LCDInit();
break;
}
}
if(a=='B')
{
break;
}
}
if(j=='B')
{
LCDInit();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -