欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1912|回復: 2
打印 上一主題 下一主題
收起左側

實現數顯油箱程序,大神們幫忙修改修改,跪求!

[復制鏈接]
跳轉到指定樓層
樓主
#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;       //剩余油量過低LED紅燈警告 端口
sbit LG=P2^5;       //剩余油量過高LED綠燈警告 端口
sbit EOC=P3^0;
char *t[]={" ","#","##","###","####","#####","######","#######","########","#########","##########"};
unsigned char code Str1[]="    Welcome  !  ";
unsigned char code Str2[]="  Please  wait  ";
void delay_10us(uint n); //10微秒的延時子程序
void delay_50us(uint n); //50微秒的延時子程序
void write_com(uchar com); //寫指令函數
void write_data(uchar dat);//輸入數據函數
void set_xy(uchar x,uchar y);  //設置顯示位置
void display(uchar x,uchar y,uchar *s); //  顯示一個字符串函數
void ADC0808();       //ADC0808轉換函數
void TMOD_Init();      //定時器初始化函數
void guodi();    //產生蜂鳴器所需震蕩LED紅
void guogao();    //產生蜂鳴器所需震蕩LED綠
void contrast(x);          //比較函數
void main()
{         
TMOD_Init();         //初始化定時器
display(0x00, Str1);
display(0x40, Str2);
BUZZER=1;
LR=1;
LG=1;
while(1)
{
  uchar n,x,s[4];
  int i;
  ADC0808();      //不斷地進行數模轉化
  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微秒的延時子程序
{
  uint i,j;
  for(i=n;i>0;i--)
    for(j=2;j>0;j--);  
}

void 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 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_init(void)        //初始化LCD1602
{
delay_10us(20);
write_com(0x38); //設置8位格式,2行,5x7
delay_10us(5);
write_com(0x0c); //整體顯示,關光標,不閃爍
delay_10us(5);
write_com(0x06); //設定輸入方式,增量不移位
delay_10us(5);
write_com(0x01); //清除屏幕顯示
delay_50us(40);
}

void LCD_set_xy(uchar x,uchar y)  //設置顯示位置
{
  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) //顯示一個字符串函數
{
  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);    //轉換是否完成               
                temp = ADC0808; //讀出轉換結果
                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()    //產生蜂鳴器所需震蕩LED紅
{
        BUZZER=~BUZZER;
        LR=~LR;
}
void guogao()    //產生蜂鳴器所需震蕩LED綠
{
        BUZZER=~BUZZER;
        LG=~LG;
}
void contrast(x)          //比較函數
{
        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;
}


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

數顯油箱.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82765 發表于 2018-1-5 10:36 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:109943 發表于 2018-1-5 10:45 | 只看該作者
這個,要考慮油箱里的油位震蕩產生的波動問題的,不然直接出來靜態的結果用到動態的物體上除了不準確還會數值亂跳,至少,要加阻尼器。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表