標(biāo)題: 實(shí)現(xiàn)數(shù)顯油箱程序,大神們幫忙修改修改,跪求! [打印本頁(yè)]

作者: 楊青木    時(shí)間: 2018-1-4 22:00
標(biāo)題: 實(shí)現(xiàn)數(shù)顯油箱程序,大神們幫忙修改修改,跪求!
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit RS=P2^0;      
sbit RW=P2^1;      
sbit E=P2^2;      
sbit BUZZER=P2^3;       //蜂鳴器io口
sbit LR=P2^4;       //剩余油量過(guò)低LED紅燈警告 端口
sbit LG=P2^5;       //剩余油量過(guò)高LED綠燈警告 端口
sbit EOC=P3^0;
char *t[]={" ","#","##","###","####","#####","######","#######","########","#########","##########"};
unsigned char code Str1[]="    Welcome  !  ";
unsigned char code Str2[]="  Please  wait  ";
void delay_10us(uint n); //10微秒的延時(shí)子程序
void delay_50us(uint n); //50微秒的延時(shí)子程序
void write_com(uchar com); //寫指令函數(shù)
void write_data(uchar dat);//輸入數(shù)據(jù)函數(shù)
void set_xy(uchar x,uchar y);  //設(shè)置顯示位置
void display(uchar x,uchar y,uchar *s); //  顯示一個(gè)字符串函數(shù)
void ADC0808();       //ADC0808轉(zhuǎn)換函數(shù)
void TMOD_Init();      //定時(shí)器初始化函數(shù)
void guodi();    //產(chǎn)生蜂鳴器所需震蕩LED紅
void guogao();    //產(chǎn)生蜂鳴器所需震蕩LED綠
void contrast(x);          //比較函數(shù)
void main()
{         
TMOD_Init();         //初始化定時(shí)器
display(0x00, Str1);
display(0x40, Str2);
BUZZER=1;
LR=1;
LG=1;
while(1)
{
  uchar n,x,s[4];
  int i;
  ADC0808();      //不斷地進(jìn)行數(shù)模轉(zhuǎn)化
  contrast(x);
  switch(i)
  {
          case 0:        display(0,1,*t),guodi();
          case 1: display(0,1,*t);
        case 2:        display(0,1,*t);
        case 3:        display(0,1,*t);
        case 4:        display(0,1,*t);
        case 5:        display(0,1,*t);
        case 6:        display(0,1,*t);
        case 7:        display(0,1,*t);
        case 8:        display(0,1,*t);
        case 9:        display(0,1,*t),guogao();
  }
  for(n=0;n<16;n++)
  {
     write_data(s);
  }
}
}
void delay_10us(uint n) //10微秒的延時(shí)子程序
{
  uint i,j;
  for(i=n;i>0;i--)
    for(j=2;j>0;j--);  
}

void delay_50us(uint n) //50微秒的延時(shí)子程序
{
  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 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)//輸入數(shù)據(jù)
{
E=0;
RS=1;
RW=0;
P0=dat; //送數(shù)據(jù)
delay_50us(10);
E=1;
delay_50us(20);
E=0;
   }
void init(void)
{
delay_50us(300); //延時(shí)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_init(void)        //初始化LCD1602
{
delay_10us(20);
write_com(0x38); //設(shè)置8位格式,2行,5x7
delay_10us(5);
write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍
delay_10us(5);
write_com(0x06); //設(shè)定輸入方式,增量不移位
delay_10us(5);
write_com(0x01); //清除屏幕顯示
delay_50us(40);
}

void LCD_set_xy(uchar x,uchar y)  //設(shè)置顯示位置
{
  uchar address;
  if(y==1)
  {
    address=0x80+x; //第一行位置
  } else {
    address=0xc0+x; //第二行位置
  }
    delay_10us(5);
    write_com(address);
}
void display(uchar x,uchar y,uchar *s) //顯示一個(gè)字符串函數(shù)
{
  set_xy(x,y);
  delay_10us(5);
  while(*s!='\0')
  {
    write_data(*s);
    s++;
  }
}
void ADC0808()                   //adc0808始
{
        uchar  temp;
        uint   voldata;
        uchar dispbuf[4];
        while(1)
        {               
                do
                {;}
                while(~EOC);    //轉(zhuǎn)換是否完成               
                temp = ADC0808; //讀出轉(zhuǎn)換結(jié)果
                voldata = temp*1.0/255*1000;
                dispbuf[3] = voldata%10;
                dispbuf[2] = voldata/10%10;
                dispbuf[1] = voldata/100%10;
                dispbuf[0] = voldata/1000;
        }
}                                                          //ADC止
void guodi()    //產(chǎn)生蜂鳴器所需震蕩LED紅
{
        BUZZER=~BUZZER;
        LR=~LR;
}
void guogao()    //產(chǎn)生蜂鳴器所需震蕩LED綠
{
        BUZZER=~BUZZER;
        LG=~LG;
}
void contrast(x)          //比較函數(shù)
{
        uint i;
        if(0<x<100)i=0;
        else if(100<x<200)i=1;
        else if(200<x,300)i=2;
        else if(300<x<400)i=3;
        else if(400<x<500)i=4;
        else if(500<x<600)i=5;
        else if(600<x<700)i=6;
        else if(700<x<800)i=7;
        else if(800<x<900)i=8;
        else if(900<x<1000)i=9;
}


數(shù)顯油箱.png (70.58 KB, 下載次數(shù): 39)

數(shù)顯油箱.png

作者: cjjcjj1    時(shí)間: 2018-1-5 10:36
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 村風(fēng)    時(shí)間: 2018-1-5 10:45
這個(gè),要考慮油箱里的油位震蕩產(chǎn)生的波動(dòng)問(wèn)題的,不然直接出來(lái)靜態(tài)的結(jié)果用到動(dòng)態(tài)的物體上除了不準(zhǔn)確還會(huì)數(shù)值亂跳,至少,要加阻尼器。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1