久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4603|回復: 8
收起左側

基于單片機的酒精濃度測試儀的設計

[復制鏈接]
ID:519003 發表于 2019-6-12 15:02 | 顯示全部樓層 |閱讀模式
設計的是一種以酒精濃度傳感器、AT89C51單片機和A/D轉換器為主的,檢測駕駛員呼出氣體的酒精濃度的,而且還帶有聲光報警功能的酒精濃度檢測儀。這種檢測儀不僅可以檢測出空氣環境中酒精濃度值,還可以由不同的環境來設定不同的閾值,當空氣中酒精濃度超過設定的閾值時進行聲光報警。系統主要為兩部分:硬件設計部分和軟件設計部分。硬件設計部分是利用MQ3氣敏傳感器先測量空氣中的酒精濃度,然后轉換為電壓信號,再通過A/D轉換器轉換成數字信號后再傳給單片機系統,最后由單片機系統和相應外圍電路進行信號處理,并由LCD顯示酒精濃度值并且對超過的閾值進行報警。軟件設計部分的程序采用的是模塊化設計思想,各個子程序的功能相對獨立,便于調試和修改。電路可分為單片機小系統電路、A/D轉換電路、聲光報警電路、LCD顯示電路,按鍵電路。
在硬件設計的時候,考慮到傳感器可以把酒精濃度這種非電量轉換為電量,可以輸出0-5V的電壓值并且電壓值比較穩定,外部干擾較小等特點。所以,可以直接把傳感器輸出的電壓值經過ADC0832采集數據送入單片機內進行處理。酒精濃度檢測儀的硬件電路設計主要包括:傳感器測量電路、AT89C51單片機系統、A/D轉換電路、LCD顯示電路、鍵盤電路、聲光報警電路。
單片機源程序如下:
  1. #include<reg51.H>
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #define uintunsigned int
  5. #define ucharunsigned char
  6. /**********************定義全局變量***************/
  7. //unsigned chardat=0x00 ;  //AD值
  8. unsigned charcount = 0x00;  //定時器計數
  9. unsigned charchannel;   //通道變量
  10. //ADC0832的引腳
  11. sbit ADCS=P1^2;  //ADC0832 chip seclect
  12. sbit ADDI=P1^1;  //ADC0832 k in
  13. sbit ADDO=P1^1;  //ADC0832 k out
  14. sbit ADCLK=P1^0;  //ADC0832 clock signal
  15. unsigned chardispbuf[3];
  16. uint temp;
  17. uint alc;//酒精濃度
  18. uchar dat; //獲取ADC轉換回來的值
  19. uchar*aa="M=T.TTmg/L";
  20. uchar*cc="alarm";
  21. uchar *dd="";
  22. uint sheding=60;
  23. ucharbb[16]={'A','l','c','o','h','o','l','=',' ','.',' ',' ','m','g','/','L'};   
  24. sbit RS =P2^0;   //定義端口
  25. sbit RW = P2^1;
  26. sbit EN = P2^2;
  27. sbit beep=P3^7;
  28. sbit k1=P1^3;//+鍵
  29. sbit k2=P1^4;//-鍵
  30. #define RS_CLRRS=0
  31. #define RS_SETRS=1
  32. #define RW_CLRRW=0
  33. #define RW_SETRW=1
  34. #define EN_CLREN=0
  35. #define EN_SETEN=1
  36. voidDelayUs2x(unsigned char t);
  37. voidDelayMs(unsigned char t);
  38. voidLCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
  39. voidLCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);
  40. void init();
  41. voidwrite_com(unsigned char com);
  42. voidwrite_data(unsigned char date);
  43. voidDelayUs2x(unsigned char t)
  44. {   
  45. while(--t);
  46. }
  47. voidDelayMs(unsigned char t)
  48. {
  49. while(t--)
  50. {
  51. //大致延時1mS
  52. DelayUs2x(245);
  53.        DelayUs2x(245);
  54. }
  55. }
  56. /*********************************lcd1602各子函數**************************************/
  57. voidwrite_com(unsigned char com) //寫命令
  58. {
  59.       RS_CLR;
  60.       RW_CLR;
  61.       P0=com;
  62.       DelayMs(5);
  63.       EN_SET;
  64.       DelayMs(5);
  65.       EN_CLR;
  66. }
  67. voidwrite_data(unsigned char date)     //寫一個字符
  68. {
  69.       RS_SET;
  70.       RW_CLR;
  71.       P0=date;
  72.       DelayMs(5);
  73.       EN_SET;
  74.       DelayMs(5);
  75.       EN_CLR;
  76. }
  77. void initlcd()                    //初始化
  78. {
  79.       write_com(0x38);
  80.       write_com(0x0c);
  81.       write_com(0x06);
  82.       write_com(0x01);
  83. }
  84. /*------------------------------------------------
  85.   寫入字符串函數
  86. ------------------------------------------------*/
  87. void LCD_Write_String(unsigned char x,unsignedchar y,unsigned char *s)
  88. {
  89. if (y == 0)
  90.      {
  91.        write_com(0x80 + x);
  92.      }
  93. else
  94.      {
  95.      write_com(0xC0+ x);
  96.      }
  97. while (*s)
  98.      {
  99. write_data( *s);
  100. s ++;
  101.      }
  102. }
  103. /*------------------------------------------------
  104.   寫入字符函數
  105. ------------------------------------------------*/
  106. void LCD_Write_Char(unsigned char x,unsignedchar y,unsigned char Data)
  107. {
  108. if (y == 0)
  109.      {
  110.      write_com(0x80+ x);
  111.      }
  112. else
  113.      {
  114.      write_com(0xC0+ x);
  115.      }
  116. write_data(Data);  
  117. }
  118. /****************************************************************************
  119. 函數功能:AD轉換子程序
  120. 入口參數:CH
  121. 出口參數:dat
  122. ****************************************************************************/
  123. //采集并返回
  124. unsigned charAdc0832(unsigned char channel) //AD轉換,返回結果
  125. {
  126. uchar i=0;
  127. uchar j;
  128. uchar dat=0;
  129. uchar ndat=0;
  130. if(channel==0)channel=2;
  131. if(channel==1)channel=3;
  132. ADDI=1;
  133. _nop_();
  134. _nop_();
  135. ADCS=0;//拉低CS端
  136. _nop_();
  137. _nop_();
  138. ADCLK=1;//拉高CLK端
  139. _nop_();
  140. _nop_();
  141. ADCLK=0;//拉低CLK端,形成下降沿1
  142. _nop_();
  143. _nop_();
  144. ADCLK=1;//拉高CLK端
  145. ADDI=channel&0x1;
  146. _nop_();
  147. _nop_();
  148. ADCLK=0;//拉低CLK端,形成下降沿2
  149. _nop_();
  150. _nop_();
  151. ADCLK=1;//拉高CLK端
  152. ADDI=(channel>>1)&0x1;
  153. _nop_();
  154. _nop_();
  155. ADCLK=0;//拉低CLK端,形成下降沿3
  156. ADDI=1;//控制命令結束
  157. _nop_();
  158. _nop_();
  159. dat=0;
  160. for(i=0;i<8;i++)
  161. {
  162. dat|=ADDO;//收數據
  163. ADCLK=1;
  164. _nop_();
  165. _nop_();
  166. ADCLK=0;//形成一次時鐘脈沖
  167. _nop_();
  168. _nop_();
  169. dat<<=1;
  170. if(i==7)dat|=ADDO;
  171. }  
  172. for(i=0;i<8;i++)
  173. {
  174. j=0;
  175. j=j|ADDO;//收數據
  176. ADCLK=1;
  177. _nop_();
  178. _nop_();
  179. ADCLK=0;//形成一次時鐘脈沖
  180. _nop_();
  181. _nop_();
  182. j=j<<7;
  183. ndat=ndat|j;
  184. if(i<7)ndat>>=1;
  185. }
  186. ADCS=1;//拉低CS端
  187. ADCLK=0;//拉低CLK端
  188. ADDO=1;//拉高數據端,回到初始狀態
  189. dat<<=8;
  190. dat|=ndat;
  191. return(dat);//returnad k
  192. }
  193. /****************************************************************************
  194. 函數功能:定時器中斷延時程序 這一段的作用時隔一段時間抽樣一次 否側顯示的最后一位會不穩定
  195. 入口參數:
  196. 出口參數:
  197. ****************************************************************************/
  198. voidtimer0(void) interrupt 1
  199. {
  200.    TMOD = 0x01;
  201.    TH0 = 0x00;
  202.    TL0 = 0x00;
  203.    IE = 0x82;
  204.    TR0 = 01;
  205.    count++;
  206.   if (count == 0x0A)
  207.   {
  208.    count = 0x00;
  209.    dat= Adc0832(channel);
  210.   }
  211. }
  212. /*voidformat_data(uint dat)
  213. {
  214.   uint change_dat=dat;
  215.   uchar ptr[3];
  216. change_dat=(change_dat<<8)+(change_dat<<7)+(change_dat<<6)+(change_dat<<5)+(change_dat<<4)+(change_dat<<2);//乘500
  217.   change_dat=change_dat>>8;//除以256
  218.   ptr[0]=change_dat/100;   //得到個位數字
  219.   ptr[1]=(change_dat-(100*ptr[0]))/10; //得到十分位數字
  220.   ptr[2]=change_dat-(100*ptr[0])-(10*ptr[1]);//得到百分位數字
  221. }*/
  222. void keyscan()
  223. {
  224.                   
  225.    if(!k1)
  226.       {
  227.   DelayMs(5);
  228.               if(!k1)
  229.               {
  230.                     while(!k1);
  231.                     sheding+=5;
  232. LCD_Write_Char(2,1,sheding/100+'0');
  233.                     LCD_Write_Char(4,1,sheding%100/10+'0');
  234.                     LCD_Write_Char(5,1,sheding%10+'0');
  235.               }
  236.        }
  237.    if(!k2)
  238.        {
  239.        DelayMs(5);
  240.               if(!k2)
  241.               {
  242.                     while(!k2);
  243.                     sheding-=5;
  244.                     LCD_Write_Char(2,1,sheding/100+'0');
  245.                     LCD_Write_Char(4,1,sheding%100/10+'0');
  246.                     LCD_Write_Char(5,1,sheding%10+'0');
  247.               }
  248.       }
  249. }
  250. /****************************************
  251. 函數功能:主程序
  252. 入口參數:
  253. 出口參數:
  254. ****************************************/
  255. void main(void)
  256. {
  257.   uchar i;
  258.   P2=0xff;  //端口初始化
  259.   P0=0xff;  
  260.   P3=0xff;
  261.   channel=0x00; //channel=0
  262.   TMOD = 0x01;
  263.   TH0 = 0x00;
  264.   TL0 = 0x00;
  265.   IE = 0x82;
  266.   TR0 = 01;
  267.   initlcd();
  268.   LCD_Write_String(0,0,bb);
  269.   LCD_Write_String(0,1,aa);
  270.   //LCD_Write_String(11,1,cc);
  271.   LCD_Write_Char(2,1,sheding/100+'0');
  272.   LCD_Write_Char(4,1,sheding%100/10+'0');
  273.   LCD_Write_Char(5,1,sheding%10+'0');
  274.   while(1)
  275.   {
  276.    temp=dat*1.0/255*500;  //電壓值轉換,5V做為參考電壓,分成256份。
  277.    
  278.    if(temp<187)
  279.    {
  280.        alc=100*(temp-8)/895;
  281.    }
  282.    else
  283.    {
  284. alc=100*(temp-133)/272;
  285.    }
  286.        dispbuf[0]=alc%10+'0';  //個位
  287.        dispbuf[1]=alc/10%10+'0'; //十位
  288.        dispbuf[2]=alc/100%10+'0'; //百位
  289.       
  290.        //dispbuf[0]=temp%10+'0';   //個位
  291.        //dispbuf[1]=temp/10%10+'0'; //十位
  292.        //dispbuf[2]=temp/100%10+'0'; //百位
  293.       
  294.        LCD_Write_Char(8,0,dispbuf[2]);
  295.        LCD_Write_Char(10,0,dispbuf[1]);
  296.        LCD_Write_Char(11,0,dispbuf[0]);
  297.        keyscan();
  298.        if(alc>sheding)
  299.         {
  300.       //beep=0;
  301.              for(i=0;i<10;i--)
  302.              {
  303.                      beep=0;
  304.                      DelayMs(1);
  305.                      beep=1;
  306.              }
  307.             
  308.       
  309.              LCD_Write_String(11,1,cc);
  310.         }
  311.        else
  312.         {
  313.       LCD_Write_String(11,1,dd);
  314.         }
  315.   }
  316. }
復制代碼


原理圖

原理圖

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:553887 發表于 2019-6-12 22:10 | 顯示全部樓層
MAIN.C(16): error C129: missing ';' before 'temp'
回復

使用道具 舉報

ID:553887 發表于 2019-6-12 22:11 | 顯示全部樓層
怎么改呢
回復

使用道具 舉報

ID:519003 發表于 2019-6-18 15:14 | 顯示全部樓層

第15行的unsigned chardispbuf[3];改為unsigned char dispbuf[3];//char后打一個空格就行了
回復

使用道具 舉報

ID:519003 發表于 2019-6-18 15:17 | 顯示全部樓層

錯誤較多,我發源碼給你
#include<reg51.h>
#include"delay.h"
#include"lcd602.h"
#include"ds18b20.h"
//**************端口定義*******************
sbit LED = P1^0;
sbit k1 = P1^4;
sbit k2 = P1^5;
sbit k3 = P1^6;
//**************數組定義*******************
uchar code tab2[]={"Temp:     "}; //5
uchar code tab3[]={" H     "}; //3
uchar code tab4[]={"L     "}; //8
//**************變量定義*******************
int temp1 = 400;   //上限
int temp3 = 100;         //下限
bit flag = 0;         //上下限選擇標志
int temp4; //當上限減到負數時
uchar temp5 = 0;
/*******************按鍵********************/
void key()
{
     if(flag == 0) //上限
         {
                 write_zifu(2,0,'*');
                 write_zifu(2,8,' ');
             if(k1 == 0)
                 {
                    delayxms(5);
                        while(k1 == 0);
                        temp1 += 10;
                 }
       
                 if(k2 == 0)
                 {
                    delayxms(5);
                        while(k2 == 0);
                        temp1 -= 10;
                 }
         }

         if(flag == 1)        //下限
         {
                 write_zifu(2,0,' ');
                 write_zifu(2,8,'*');
             if(k1 == 0)
                 {
                    delayxms(5);
                        while(k1 == 0);
                        temp3 += 10;
                 }
       
                 if(k2 == 0)
                 {
                    delayxms(5);
                        while(k2 == 0);
                        temp3 -= 10;
                 }
         }
         

         if(k3 == 0) //上下限選擇標志
         {
            delayxms(5);
                while(k3 == 0);
                flag = ~flag;
         }
}
/*******************定時器T1初始化********************/
void T1_init()
{
          TMOD = TMOD | 0x10;            //設T1為方式1
          TH1 = (65535-20000)/256;       //計數20000個
          TL1 = (65535-20000)%256;
          EA = 1;                        //開啟總中斷         
          ET1 = 1;                       //允許T1中斷
          TR1 = 1;                       //啟動
}
/*******************主函數********************/
void main()
{       
            chushihua();//lcd1602初始化
          write_string(1,0,tab2);
          write_string(2,0,tab3);
          write_string(2,9,tab4);
          T1_init();
          while(1)
          {
                          key();
                          ds1820disp();
                          /*溫度上限*/
                      if(temp1 < 0)
                          {
                                   write_zifu(2,2,'-');
                                   temp4 = temp1;
                                   temp4 = ~temp4;
                                   temp4 += 1;
                                     write_num3(2,3,temp4);
                                   write_zifu(2,7,' ');
                          }
                          else
                          {
                                     write_zifu(2,2,'+');
                                   if(temp1>=1000)
                                   {
                                              write_num4(2,3,temp1);
                                   }
                                   else
                                   {
                                              write_num3(2,3,temp1);
                                   }
                          }

                          /*溫度下限*/
                      if(temp3 < 0)
                          {
                                   write_zifu(2,10,'-');
                                     write_num3(2,11,-(temp3));
                                   write_zifu(2,15,' ');
                          }
                          else
                          {
                                     write_zifu(2,10,'+');
                                   if(temp3>=1000)
                                   {write_num4(2,11,temp3);}
                                   else
                                   {write_num3(2,11,temp3);}
                          }

                          /*報警*/
                          if(flag_temp == 1) //溫度小于零
                          {
                              if((-t)>temp1 || (-t)<temp3) {LED = 0;}
                              else {LED = 1;}
                          }
                          else //溫度大于零
                          {
                              if(t>temp1 || t<temp3) {LED = 0;}
                              else {LED = 1;}
                          }
          }           
}
/**************************定時器T1中斷服務函數************************************/
void T1_time() interrupt 3   
{
      TH1 = (65535-20000)/256;       //計數20000個
          TL1 = (65535-20000)%256;
          temp5 += 1;
          if(temp5 >= 25)
          {
             temp5 = 0;
                 TR1 = 0;
                 ReadTemperature();
                 TR1 = 1;
          }
}
回復

使用道具 舉報

ID:519003 發表于 2019-6-18 15:18 | 顯示全部樓層

是這個,這個是正確的
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
/**********************定義全局變量***************/
//unsigned char dat=0x00 ;  //AD值
unsigned char count = 0x00;  //定時器計數
unsigned char channel;   //通道變量
//ADC0832的引腳
sbit ADCS =P1^2;  //ADC0832 chip seclect
sbit ADDI =P1^1;  //ADC0832 k in
sbit ADDO =P1^1;  //ADC0832 k out
sbit ADCLK =P1^0;  //ADC0832 clock signal
unsigned char dispbuf[3];
uint temp;
uint alc;//酒精濃度
uchar dat; //獲取ADC轉換回來的值
uchar *aa="M=T.TTmg/L";
uchar *cc="alarm";
uchar *dd=" ";
uint sheding=60;
uchar bb[16]={'A','l','c','o','h','o','l','=',' ','.',' ',' ','m','g','/','L'};       
sbit RS = P2^0;   //定義端口
sbit RW = P2^1;
sbit EN = P2^2;
sbit beep=P3^7;
sbit k1=P1^3;//+鍵
sbit k2=P1^4;//-鍵
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);
void init();
void write_com(unsigned char com);
void write_data(unsigned char date);
void DelayUs2x(unsigned char t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{

while(t--)
{
//大致延時1mS
DelayUs2x(245);
         DelayUs2x(245);
}
}
/*********************************lcd1602各子函數**************************************/
void write_com(unsigned char com) //寫命令
{
        RS_CLR;
        RW_CLR;
        P0=com;
        DelayMs(5);
        EN_SET;
        DelayMs(5);
        EN_CLR;
}
void write_data(unsigned char date)         //寫一個字符
{
        RS_SET;
        RW_CLR;
        P0=date;
        DelayMs(5);
        EN_SET;
        DelayMs(5);
        EN_CLR;
}
void initlcd()                        //初始化
{
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
}
/*------------------------------------------------
  寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
        {
         write_com(0x80 + x);
        }
else
        {
        write_com(0xC0 + x);
        }
while (*s)
        {
write_data( *s);
s ++;
        }
}
/*------------------------------------------------
  寫入字符函數
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
        {
        write_com(0x80 + x);
        }
else
        {
        write_com(0xC0 + x);
        }
write_data(Data);  
}
/****************************************************************************
函數功能:AD轉換子程序
入口參數:CH
出口參數:dat
****************************************************************************/
//采集并返回
unsigned char Adc0832(unsigned char channel) //AD轉換,返回結果
{
uchar i=0;
uchar j;
uchar dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI=1;
_nop_();
_nop_();
ADCS=0;//拉低CS端
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=channel&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_();
_nop_();
ADCLK=1;//拉高CLK端
ADDI=(channel>>1)&0x1;
_nop_();
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令結束
_nop_();
_nop_();
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO;//收數據
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次時鐘脈沖
_nop_();
_nop_();
dat<<=1;
if(i==7)dat|=ADDO;
}  
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO;//收數據
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;//形成一次時鐘脈沖
_nop_();
_nop_();
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
ADCS=1;//拉低CS端
ADCLK=0;//拉低CLK端
ADDO=1;//拉高數據端,回到初始狀態
dat<<=8;
dat|=ndat;
return(dat);//return ad k
}
/****************************************************************************
函數功能:定時器中斷延時程序 這一段的作用時隔一段時間抽樣一次 否側顯示的最后一位會不穩定
入口參數:
出口參數:
****************************************************************************/
void timer0(void) interrupt 1
{
   TMOD = 0x01;
   TH0 = 0x00;
   TL0 = 0x00;
   IE = 0x82;
   TR0 = 01;
   count++;
  if (count == 0x0A)
  {
   count = 0x00;
   dat= Adc0832(channel);
  }
}
/*void format_data(uint dat)
{
  uint change_dat=dat;
  uchar ptr[3];
  change_dat=(change_dat<<8)+(change_dat<<7)+(change_dat<<6)+(change_dat<<5)+(change_dat<<4)+(change_dat<<2);//乘500
  change_dat=change_dat>>8;//除以256
  ptr[0]=change_dat/100;   //得到個位數字
  ptr[1]=(change_dat-(100*ptr[0]))/10; //得到十分位數字
  ptr[2]=change_dat-(100*ptr[0])-(10*ptr[1]); //得到百分位數字
}*/
void keyscan()
{
                     
   if(!k1)
        {
  DelayMs(5);
                 if(!k1)
                  {
                        while(!k1);
                        sheding+=5;
LCD_Write_Char(2,1,sheding/100+'0');
                        LCD_Write_Char(4,1,sheding%100/10+'0');
                        LCD_Write_Char(5,1,sheding%10+'0');
                  }
         }
   if(!k2)
         {
          DelayMs(5);
                 if(!k2)
                  {
                        while(!k2);
                        sheding-=5;
                        LCD_Write_Char(2,1,sheding/100+'0');
                        LCD_Write_Char(4,1,sheding%100/10+'0');
                        LCD_Write_Char(5,1,sheding%10+'0');
                  }
        }

}
/****************************************
函數功能:主程序
入口參數:
出口參數:

****************************************/
void main(void)
{
  uchar i;
  P2=0xff;   //端口初始化
  P0=0xff;   
  P3=0xff;  
  channel=0x00;  //channel=0
  TMOD = 0x01;
  TH0 = 0x00;
  TL0 = 0x00;
  IE = 0x82;
  TR0 = 01;
  initlcd();
  LCD_Write_String(0,0,bb);
  LCD_Write_String(0,1,aa);
  //LCD_Write_String(11,1,cc);
  LCD_Write_Char(2,1,sheding/100+'0');
  LCD_Write_Char(4,1,sheding%100/10+'0');
  LCD_Write_Char(5,1,sheding%10+'0');
  while(1)
  {
   temp=dat*1.0/255*500;  //電壓值轉換,5V做為參考電壓,分成256份。
   
   if(temp<187)
   {

         alc=100*(temp-8)/895;
   }
   else
   {
alc=100*(temp-133)/272;
   }
          dispbuf[0]=alc%10+'0';         //個位
          dispbuf[1]=alc/10%10+'0'; //十位
          dispbuf[2]=alc/100%10+'0'; //百位
       
          //dispbuf[0]=temp%10+'0';         //個位
          //dispbuf[1]=temp/10%10+'0'; //十位
          //dispbuf[2]=temp/100%10+'0'; //百位
       
          LCD_Write_Char(8,0,dispbuf[2]);
          LCD_Write_Char(10,0,dispbuf[1]);
          LCD_Write_Char(11,0,dispbuf[0]);
          keyscan();
          if(alc>sheding)
          {
        //beep=0;
                for(i=0;i<10;i--)
                {
                         beep=0;
                         DelayMs(1);
                         beep=1;
                }
               
       
                LCD_Write_String(11,1,cc);
          }
          else
          {
        LCD_Write_String(11,1,dd);
          }
  }
}

回復

使用道具 舉報

ID:553887 發表于 2019-6-20 22:14 | 顯示全部樓層
gagalonghun 發表于 2019-6-18 15:18
是這個,這個是正確的
#include  
#include

樓主負責又細心
回復

使用道具 舉報

ID:659880 發表于 2020-6-15 10:22 來自手機 | 顯示全部樓層
這個原理圖不清晰呀,還有beep的端口是干啥用的呀
回復

使用道具 舉報

ID:782510 發表于 2020-12-8 23:43 | 顯示全部樓層
有仿真圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91在线 | 中日 | 免费国产精品久久久久久 | 一区在线播放 | 欧美日韩视频在线第一区 | 国产精品18hdxxxⅹ在线 | 成人在线观看免费 | 国产真实乱对白精彩久久小说 | 成人亚洲网站 | 在线 丝袜 欧美 日韩 制服 | 99精品在线观看 | 亚洲av一级毛片 | 黄色一级免费 | 国产亚洲一区二区精品 | 黄色毛片黄色毛片 | 日韩国产一区二区三区 | 国产亚洲成av人在线观看导航 | 日本不卡免费新一二三区 | 99视频在线| 日韩精品一区二区三区中文字幕 | 91精品国产一区二区三区 | 午夜精品视频在线观看 | 国产成人网 | 国产精品视频一二三区 | 久草网址| a级毛片毛片免费观看久潮喷 | 大陆一级毛片免费视频观看 | 在线视频一区二区 | 伦理午夜电影免费观看 | 久久久久国产一区二区三区四区 | 日本韩国电影免费观看 | 国产精品久久av | 91在线一区二区三区 | 国产伦精品一区二区三区照片91 | 亚洲午夜在线 | av中文天堂 | 国产一区二区三区四区 | 久久精品一二三影院 | 美女天堂av| 亚洲精品一区在线观看 | 国产美女久久 | 亚洲视频a|