#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;}
}
}
|