📄 8-8.c
字号:
#include<at89x51.h>
#include<intrins.h>
typedef unsigned char zj;
sbit L_RS=P2^0;
sbit L_RW=P2^1;
sbit L_EP=P2^2;
zj code dis1[]={"interrupt number"};
zj nm,pp,kk;
delay(int ms)
{
int i;
while(ms--)
{for(i=0;i<250;i++)
{_nop_();_nop_();_nop_();_nop_();}
}}
bit yj_bz() //测试液晶忙状态检测函数,返回“位”类型
{bit result;
L_RS=0;
L_RW=1;
L_EP=1;
_nop_();_nop_();_nop_();_nop_();
result=(bit)(P0&0x80); //将P0口的最高位取出,并强制为位类型
L_EP=0; //停止读操作
return result;
}
yj_wcmd(zj cmd) //写入指令数据到LCD
{
while(yj_bz());
L_RS=0;
L_RW=0;
L_EP=0; //为正脉冲做准备
_nop_();_nop_();
P0=cmd; //将命令写入P0口
_nop_();_nop_();_nop_();_nop_();
L_EP=1; //准备写操作下降沿
_nop_();_nop_();_nop_();_nop_();
L_EP=0; //出现有效下降沿
}
yj_pos(zj pos) //设定字符显示位置,pos范围(00H-27H,40-67H)
{yj_wcmd(pos|0x80);}
yj_wdat(zj dat)
{
while(yj_bz());
L_RS=1;
L_RW=0;
L_EP=0; //为正脉冲做准备
P0=dat;
_nop_();_nop_();_nop_();_nop_();
L_EP=1; //准备写操作下降沿
_nop_();_nop_();_nop_();_nop_();
L_EP=0; //出现有效下降沿
}
yj_init() //初始化
{
yj_wcmd(0x38);
delay(1);
yj_wcmd(0x0c);
delay(1);
yj_wcmd(0x06);
delay(1);
yj_wcmd(0x01);
delay(1);
}
main()
{zj i,a1,a2;
TMOD&=0xF0;
TMOD|=0x09;
TH0=0x3c;
TL0=0xb0;
ET0=1;
EA=1;
TR0=1;
yj_init();
delay(10);
while(1)
{if(kk)
{yj_wcmd(0x01);
yj_wcmd(0x06); //调用写命令函数,向右移动光标(增量)
yj_pos(0); //调用显示位置函数,设置显示位置为第一行的第一个字符
i=0;
while(dis1[i]!='\0')
{yj_wdat(dis1[i]); //调用写数据函数,向液晶写字符,由于是增量方式,所以AC自动加
i++;
}
a1=(pp/10)|0x30;
a2=(pp%10)|0x30;
yj_pos(0x40);
yj_wdat(a1);
yj_pos(0x41);
yj_wdat(a2);
kk=0;
}}}
void it_timer0(void)interrupt 1
{
TH0=0x3c;
TL0=0xb0;
nm++;
if(nm==20)
{nm=0;
kk=1;
pp++;
if(pp==50)
pp=0;
P2_7=~P2_7;
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -