完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
数显油箱,用*在LCD162第一行代表剩余油液高度,第二行显示剩余油液重量,剩余油液高度过高过低都有声光报警 #include #include typedef unsigned int uint; typedef unsigned char uchar; ***it RS=P2^0; ***it RW=P2^1; ***it E=P2^2; ***it BUZZER=P2^3; //蜂鸣器io口 ***it LR=P2^4; //剩余油量过低LED红灯警告 端口 ***it LG=P2^5; //剩余油量过高LED绿灯警告 端口 void write_com(uchar com);//写指令函数 void write_data(uchar dat);//输入数据函数 void display(uchar x,uchar y,uchar *s); // 显示一个字符串函数 void ADC0808(); //ADC0808转换函数 void TMOD_Init(); //定时器初始化函数 void timer() interrupt 1; //中断函数。产生蜂鸣器所需震荡LED红 void timer() interrupt 2; //中断函数。产生蜂鸣器所需震荡LED绿 void LCD_delay_10us(uint n); //10微秒的延时子程序 void LCD_delay_50us(uint n); //50微秒的延时子程序 void main() { TMOD_Init(); //初始化定时器 BUZZER=1; LR=1; LG=1; while(1) { ADC0808(); //不断地进行数模转化 } } void LCD_delay_10us(uint n) //10微秒的延时子程序 { uint i,j; for(i=n;i>0;i--) for(j=2;j>0;j--); } void LCD_delay_50us(uint n) //50微秒的延时子程序 { uint i,j; for(i=n;i>0;i--) for(j=22;j>0;j--); } void TMOD_Init() { TMOD=0X01; TH0=0xfc; TL0=0x18; EA=1; ET0=1; TR0=0; } void LCD_init(void) //初始化LCD1602 { LCD_delay_10us(20); LCD_write_command(0x38); //设置8位格式,2行,5x7 LCD_delay_10us(5); LCD_write_command(0x0c); //整体显示,关光标,不闪烁 LCD_delay_10us(5); LCD_write_command(0x06); //设定输入方式,增量不移位 LCD_delay_10us(5); LCD_write_command(0x01); //清除屏幕显示 LCD_delay_50us(40); } void write_com(uchar com)//写指令 { E=0; RS=0; RW=0; P0=com; delay_50us(10); E=1; delay_50us(20); E=0; } void write_data(uchar dat)//输入数据 { E=0; RS=1; RW=0; P0=dat; //送数据 delay_50us(10); E=1; delay_50us(20); E=0; } void init(void) { delay_50us(300); //延时15ms,换算15ms等于300us write_com(0x38); delay_50us(100); write_com(0x38); delay_50us(100); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); } void LCD_set_xy(uchar x,uchar y) //设置显示位置 { uchar address; if(y==1) { address=0x80+x; //第一行位置 } else { address=0xc0+x; //第二行位置 } LCD_delay_10us(5); LCD_write_command(address); } void display(uchar x,uchar y,uchar *s) //显示一个字符串函数 { LCD_set_xy(x,y); LCD_delay_10us(5); while(*s!=' |