📄 main.c
字号:
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD=0X0C9;
sbit backlightkey=P2^7 ;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcde=P1^2;
sbit lcdbusy=P0^7;
sbit key1=P2^1;
sbit key2=P2^2;
sbit key3=P2^3;
static uchar timecount=0,timechange=0,count=0;
static uchar eorrflag=0;
uint counth=0,countl=0;
char rbuff[10],scount=0;//串口接收缓冲区和缓冲区已存数据个数
void lcdbusywait()
{
P0=0x0ff;
lcdrs=0;
lcdrw=1;
lcde=0;
;
lcde=1;
while(lcdbusy);
lcde=1;
}
void waitcmd()
{
lcdrs=0;// clr p1.0
lcdrw=0;//clr p1.1
lcde=0;//clr p1.2
lcdbusywait();//acall busy
lcde=1;//setb p1.2
}
void lcdinit()
{
P0=0X01;
waitcmd();
P0=0X38;
waitcmd();
P0=0X0C;
waitcmd();
P0=0X06;
waitcmd();
P0=0X80;
waitcmd();
}
void write(uchar *str)
{
do{
P0=*str;
lcdrs=1;
lcdrw=0;
lcde=0;
lcdbusywait();
lcde=1;
}while(*(++str)!='\0');
}
void writenum(uint num,uchar bitnum)
{uchar str[8];
str[bitnum]='\0';
do
{
str[bitnum-1]=num%10+48;
num/=10;
}while(bitnum--);
write(str);
}
void ledbacklight(bit on) //on=1表示开灯,on=0表示关灯
{
backlightkey=~on;
}
void cursestatus(uchar statusx,uchar statusy)
{
if(statusx>16||statusx<1||statusy<1||statusy>2)
return;
else
{
if(statusy==1)
{
P0=0x80+statusx-1;
waitcmd();
}
else
{P0=0x0c0+statusx-1;
waitcmd();
}
}
}
void delay()
{uchar i,j;
for(i=0xff;i>0;i--)
for(j=0xff;j>0;j--)
;
}
void cleardisplay()
{
P0=1;
waitcmd();
}
void sentbyte(uchar var)
{ES=0;
SBUF=var;
while(TI==0);TI=0;
ES=1;
}
void serial() interrupt 4 //串口中断服务程序
{
if(TI)
{
TI=0;
}
if (RI) {
RI = 0;
rbuff[scount] = SBUF;
SBUF=rbuff[scount];
scount++;
if(scount==10)scount=0;
}
}
void counter()interrupt 3 using 2
{
TL1=0;
TH1=0;
eorrflag=1;
TR1=0;
}
void timer()interrupt 1 using 3
{
TL0=0X0AF;
TH0=0X03C;
TR1=0;
count++;
if(count==2)
{counth=TH1;
countl=TL1;
timechange=1;
TL1=0;
TH1=0;
TR1=1;
timecount++;
count=0;
}
}
void main()
{
uint i=30;
//T0定时器与T1计数器开中断
IT0=0;
PT0=1;
PX0=0;
EA=1;
ET0=1;
EX0=1;
ET1=1;
TMOD=0X51;
lcdinit();
ledbacklight(1);
write("hello,world!");
for(;i>0;i--)
delay();
i=90;
cleardisplay();
cursestatus(1,1);
write("i am twolf");
cursestatus(1,2);
writenum(i,3);
//定时器0初始化并开启,定时为0.5S
TL0=0X0AF;
TH0=0X03C;
TR0=1;
//计数器1初始化并开启
TL1=0;
TH1=0;
TR1=1;
SCON = 0x50;
TCLK=1;
RCLK=1;
T2MOD = 0X01;
PCON = 0x80 ;
RCAP2H = 0xff;
RCAP2L = 0xdc;
TH2=0XFF;
TL2=0XDC;
TR2 = 1;
ES=1;
while(1)
{
if(eorrflag)write("eorr!");
if(timechange)
{
sentbyte(timecount);
timechange=0;
cursestatus(1,2);
countl=countl+counth*256;
writenum(countl,6);
write(" T:");
writenum((uint)timecount,3);
}
else continue;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -