|
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
sbit cs=P2^4;
sbit ds=P3^0;
sbit gs=P3^1;
sbit int0=P3^2;
sbit BJ=P3^3;
sbit rd=P3^6;
sbit wr=P3^7;
uchar code table[]="当前机油压力为: " ; //显示的字母
uchar code table1[]="0123456789" ;
uint bj=0,zs=0,num;
uchar i,j;
void start_ad() //启动ad转换
{ cs=0;
_nop_();
wr=0;
_nop_();
wr=1;
while(int0);
cs=1;
}
void read_ad() //使ad输出
{
P0=0xff;
cs=0;
rd=0;
_nop_();
num=P0;
rd=1;
cs=1;
// return(number);
}
void delay(uchar x) //延时子函数
{
uchar i,j;
for(i=x;i>0;i--);
for(j=110;j>0;j--);
}
void read_busy()//读忙子程序
{
P0=0xff;
rs=0;
rw=1;
e=1;
delay(5);
while(P0&0x80); //P0和10000000相与,D7位若不为0,停在此处
e=0; //若为0跳出进入下一步;这条语句的作用就是检测D7位
}
void write_cmd(uchar cmd) //写指令子函数
{
read_busy();
rs=0;
rw=0;
e=0;
_nop_();
P1=cmd;
_nop_();
_nop_();
rs=0;
_nop_();
_nop_();
wr=0;
_nop_();
e=0;
_nop_();
_nop_();
e=1;
}
void write_dat(uchar dat) //写数据子函数
{
read_busy();
rs=0;
rw=0;
e=0;
_nop_();
_nop_();
P2=dat;
_nop_();
_nop_();
rs=1;
_nop_();
_nop_();
wr=0;
delay(5);
e=0;
delay(5);
e=1;
}
void lcd_init() //初始化子函数
{
write_cmd(0x01);//清屏
delay(5);
write_cmd(0x3f);//功能设置
delay(5);
write_cmd(0x0d); //显示控制
delay(5);
write_cmd(0x06); //输入方式设置
}
void main()
{
uchar i; //定义局部变量
lcd_init(); //初始化LCD
write_cmd(0x80+0x02+0x10);//指针的位置
for(i=0;i<16;i++) //显示
{
write_dat(table[i]);
delay(50);//延时,用于调节速度不匹配
}
write_cmd(0x08+0x04+0x01);
for(i=0;i<16;i++)
{
write_dat(table1[num]);
delay(50);
}
for(i=0;i<16;i++)
{
write_cmd(0x18);
delay(50);
}
while (1) // 报警程序
{if(ds==0){zs=30;}
else if(gs==0){zs=180;}
if(num<zs){bj=1;}
else{bj=0;}
if(bj==1){BJ=0;}
else{BJ=1;}
}
}
|
|