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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

編輯的時候一直提示missing';'before'set',改了一遍前面的所有分號,仍不對,求指點

查看數: 2855 | 評論數: 11 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-5-11 08:15

正文摘要:

編輯的時候一直提示missing';'before'set',改了一遍前面的所有分號,仍然顯示不對。單片機小白,求指點。

回復

ID:748796 發表于 2020-5-12 16:40
wulin 發表于 2020-5-12 07:20
給你整理了一下,可以通過編譯。是否能用未經驗證。

確實用不了(ó﹏ò),不過還是十分感謝的
ID:213173 發表于 2020-5-12 07:20
A_cherry 發表于 2020-5-11 12:31
這是原程序,用的是keil uVersion4版本。

給你整理了一下,可以通過編譯。是否能用未經驗證。
  1. //程序頭函數
  2. #include <reg52.h>
  3. //宏定義
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define Data_ADC0809 P1
  7. //LCD管腳聲明
  8. sbit LCDRS = P2^3;
  9. sbit LCDEN= P2^4;
  10. sbit LED_R= P2^2;        //COled
  11. sbit LED_Y= P2^0;
  12. sbit FENG = P2^5;        //蜂鳴器
  13. sbit san=P3^4;                //風扇
  14. //ADC0809
  15. sbit ST=P3^3;
  16. sbit EOC=P3^6;
  17. sbit OE=P3^2;
  18. sbit A0=P3^1;                //0809A0地址腳
  19. //按鍵
  20. sbit Key1=P2^6;                //設置鍵
  21. sbit Key2=P2^7;                //加鍵
  22. sbit Key3=P3^7;                //減鍵

  23. //初始畫時顯示的內容
  24. uchar code Init1[]="MQ4:    MQ138 :   ";
  25. uchar code Init2[]="H4 :    H138  :   ";

  26. bit bdata flag4,flag138;
  27. uchar set;
  28. uchar MQ4=0,MQ138=0;                //讀取傳感器數據變量
  29. //指示燈變量
  30. uchar WARNING4=30,WARNING138=60;                //初始上限值
  31. //函數聲明
  32. uchar ADC0809();
  33. void Key();
  34. //LCD延時
  35. void LCDdelay(uint z)
  36. {
  37.   uint x,y;
  38.   for(x=z;x>0;x--)
  39.     for(y=10;y>0;y--);
  40. }
  41. //寫命令
  42. void write_com(uchar com)
  43. {
  44.   LCDRS=0;
  45.   P0=com;
  46.   LCDdelay(5);
  47.   LCDEN=1;
  48.   LCDdelay(5);
  49.   LCDEN=0;
  50. }
  51. //寫數據
  52. void write_data(uchar date)
  53. {
  54.   LCDRS=1;
  55.   P0=date;
  56.   LCDdelay(5);
  57.   LCDEN=1;
  58.   LCDdelay(5);
  59.   LCDEN=0;
  60. }
  61. //1602初始化
  62. void Init1602()
  63. {
  64.   uchar i=0;
  65.   write_com(0x38);//屏幕初始化
  66.   write_com(0x0c);//打開顯示 無光標 無光標閃爍
  67.   write_com(0x06);//當讀或寫一個字符是指針后一一位
  68.   write_com(0x01);//清屏
  69.   write_com(0x80);//設置位置

  70.   for(i=0;i<16;i++)
  71.   {
  72.                 write_data(Init1);
  73.   }                                                                  
  74.   write_com(0x80+0x40);//設置位置         
  75.   for(i=0;i<16;i++)
  76.   {
  77.                 write_data(Init2);
  78.   }
  79. }

  80. void Display_1602(uchar NOW_GAS,uchar NOW_CO,uchar SET_GAS,uchar SET_CO)
  81. {

  82.         write_com(0x80+4);
  83.         write_data('0'+NOW_GAS/100);
  84.         write_data('0'+NOW_GAS/10%10);
  85.         write_data('0'+NOW_GAS%10);

  86.         write_com(0x80+0x40+4);
  87.         write_data('0'+SET_GAS/100);
  88.         write_data('0'+SET_GAS/10%10);
  89.         write_data('0'+SET_GAS%10);

  90.         write_com(0x80+13);
  91.         write_data('0'+NOW_CO/100);
  92.         write_data('0'+NOW_CO/10%10);
  93.         write_data('0'+NOW_CO%10);

  94.         write_com(0x80+0x40+13);
  95.         write_data('0'+SET_CO/100);
  96.         write_data('0'+SET_CO/10%10);
  97.         write_data('0'+SET_CO%10);
  98. }

  99. /*
  100. void delay(uint z)
  101. {
  102.         uint i,j;
  103.         for(i=0;i<z;i++)
  104.         for(j=0;j<121;j++);
  105. }
  106. */
  107. //

  108. void init()                                 //定時器初始化函數
  109. {
  110.         TMOD=0x01;                          //工作方式采用16位定時方式,通過TR1置位啟動
  111.         TL0=0xb0;           //這是給定時器T0設定時初值。分別給T0高8位,低8位送初值,這個值在12MHZ時,應該是定時50ms
  112.         TH0=0x3c;                         //賦初值
  113.         EA=1;                                 //打開中斷總開關
  114.         ET0=1;                                //打開中斷允許開關
  115.         TR0=1;                                //打開中斷定時開關
  116. }


  117. //ADC0809讀取信息
  118. uchar ADC0809()
  119. {
  120.         uchar temp_=0x00;
  121.         OE=0;        //初始化高阻太
  122.         ST=0;        //轉化初始化
  123.         ST=1;        //開始轉換
  124.         ST=0;
  125.         while(EOC==0)        //外部中斷等待AD轉換結束
  126.         OE=1;           //讀取轉換的AD值
  127.         temp_=Data_ADC0809;
  128.         OE=0;
  129.         return temp_;
  130. }

  131. void Key()                          //按鍵函數
  132. {
  133.         if(Key1==0)                   //設置按鍵
  134.         {
  135.                 while(Key1==0);//按鍵釋放
  136.                 FENG=0;                   //打開蜂鳴器
  137.                 set++;                   //設置變量加
  138.                 flag4=0;
  139.                 flag138=0;           //報警變量清零
  140.                 LED_Y=1;
  141.                 LED_R=1;           //關閉LED
  142.                 san=1;                   //關閉風扇
  143.                 TR0=0;                   //關閉定時器
  144.         }
  145.         if(set==1)                   //設置報警值
  146.         {
  147.                 write_com(0x38);//屏幕初始化
  148.                 write_com(0x80+0x40+6);//位置
  149.                    write_com(0x0f);//打開顯示 無光標 光標閃爍
  150.                    write_com(0x06);//當讀或寫一個字符是指針后一一位
  151.                 FENG=1;

  152.         }
  153.         if(set==2)
  154.         {
  155.                 write_com(0x38);//屏幕初始化
  156.                 write_com(0x80+0x40+15);//位置
  157.                    write_com(0x0f);//打開顯示 無光標 光標閃爍
  158.                    write_com(0x06);//當讀或寫一個字符是指針后一一位
  159.                 FENG=1;

  160.         }
  161.         else if(set>=3)                 //設置完
  162.         {
  163.                 set=0;                         //清零
  164.                 write_com(0x38);//屏幕初始化
  165.                 write_com(0x0c);//打開顯示 無光標 無光標閃爍
  166.                 FENG=1;                        //關閉蜂鳴器
  167.                 TR0=1;                        //打開定時器
  168.         }
  169.         if(Key2==0&&set==1)        //加按鍵按下
  170.         {
  171.                 while(Key2==0);                //按鍵釋放
  172.                 FENG=0;                                //打開蜂鳴器,做按鍵音
  173.                 WARNING4++;                                                //報警值加
  174.                 if(WARNING4>=255)                                //報警值加到最大
  175.                 WARNING4=0;                                                //報警值清零
  176.                 write_com(0x80+0x40+4);                        //選中位置顯示報警值
  177.                 write_data('0'+WARNING4/100);        //將報警值拆開成單獨的一位,顯示。例如報警值是123,那么123除以100的商是1,這里顯示的就是1
  178.                 write_data('0'+WARNING4/10%10);        //123除以10得到的商是12,,12除以10的余數就是2,這里顯示的就是2
  179.                 write_data('0'+WARNING4%10);        //123除以10的余數是3,這里顯示的就是3,數據+“0”是為了得到液晶中對應數字的顯示碼
  180.                 write_com(0x80+0x40+6);                        //閃爍的位置
  181.                 FENG=1;                                                        //關閉蜂鳴器
  182.         }
  183.         if(Key2==0&&set==2)                                        //注釋同上
  184.         {
  185.                 while(Key2==0);
  186.                 FENG=0;
  187.                 WARNING138++;
  188.                 if(WARNING138>=255)
  189.                 WARNING138=0;
  190.                 write_com(0x80+0x40+13);
  191.                 write_data('0'+WARNING138/100);
  192.                 write_data('0'+WARNING138/10%10);
  193.                 write_data('0'+WARNING138%10);
  194.                 write_com(0x80+0x40+15);//位置
  195.                 FENG=1;
  196.         }
  197.         if(Key3==0&&set==1)
  198.         {
  199.                 while(Key3==0);
  200.                 FENG=0;
  201.                 WARNING4--;
  202.                 if(WARNING4<=0)
  203.                 WARNING4=255;
  204.                 write_com(0x80+0x40+4);
  205.                 write_data('0'+WARNING4/100);
  206.                 write_data('0'+WARNING4/10%10);
  207.                 write_data('0'+WARNING4%10);
  208.                 write_com(0x80+0x40+6);//位置
  209.                 FENG=1;
  210.         }
  211.         if(Key3==0&&set==2)
  212.         {
  213.                 while(Key3==0);
  214.                 FENG=0;
  215.                 WARNING138--;
  216.                 if(WARNING138<=0)
  217.                 WARNING138=255;
  218.                 write_com(0x80+0x40+13);
  219.                 write_data('0'+WARNING138/100);
  220.                 write_data('0'+WARNING138/10%10);
  221.                 write_data('0'+WARNING138%10);
  222.                 write_com(0x80+0x40+15);//位置
  223.                 FENG=1;
  224.         }
  225. }
  226. void main()                           //主函數
  227. {
  228.         Init1602();                   //初始化顯示函數
  229.         init();                           //初始化定時器
  230.         while(1)                   //進入循環
  231.         {
  232.                 A0=0;                   //地址腳=0時,讀取MQ4數據                                                   
  233.                 MQ4=ADC0809();
  234.                 A0=1;                   //地址腳=1時,讀取MQ138數據
  235.                 MQ138=ADC0809();
  236.                 if(set==0)           //不在設置狀態時
  237.                 Display_1602(MQ4,MQ138,WARNING4,WARNING138); //正常顯示數據
  238.                 if(set==0)
  239.                 {
  240.                         if(MQ4<WARNING4)           //判斷數據是否小于報警值
  241.                         flag4=0;
  242.                         else if(MQ4>WARNING4)
  243.                         flag4=1;
  244.                         if(MQ138<WARNING138)
  245.                         flag138=0;
  246.                         else if(MQ138>WARNING138)
  247.                         flag138=1;                        
  248.                 }
  249.                 else
  250.                 {
  251.                         flag4=0;flag138=0;
  252.                 }
  253.                 Key();                                                 //掃描按鍵函數
  254.         }
  255. }
  256. void  time1_int(void) interrupt 1//定時器工作函數
  257. {
  258.         uchar count;                                 //定義變量用于定時         
  259.         TL0=0xb0;
  260.         TH0=0x3c;                                         //定時器重新賦初值50ms
  261.           count++;                                         //變量50ms加一次
  262.         if(count==10)                                 //加10次就是500ms
  263.         {
  264.                 count=0;                                 //變量清零
  265.                 if(flag4==0)                         //報警關
  266.                         LED_Y=1;                         //報警指示燈熄滅
  267.                 else                                         //報警開
  268.                         LED_Y=0;                         //對應的報警指示燈點亮
  269.                 if(flag138==0)
  270.                         LED_R=1;
  271.                 else
  272.                         LED_R=0;
  273.                 if(flag4==1||flag138==1)         //有報警
  274.                 {
  275.                         FENG=!FENG;                         //蜂鳴器閃爍報警
  276.                         san=0;                                 //打開繼電器啟動風扇
  277.                 }
  278.                 if(flag4==0&&flag138==0)         //都沒有報警
  279.                 {
  280.                         FENG=1;                                 //關閉蜂鳴器
  281.                         san=1;                                 //關閉風扇
  282.                 }
  283.         }
  284. }
復制代碼
ID:557403 發表于 2020-5-11 15:58
沒有 uchar 的定義
ID:735148 發表于 2020-5-11 15:31
在include下面加上#define uchar unsigned char   或者直接把程序中的uchar替換成unsigned char
ID:347349 發表于 2020-5-11 15:21
//程序頭函數
#include <reg52.h>
//宏定義
#define uint unsigned int
#define uchar unsigned char
sbit LED_R= P2^2;        //COled
sbit LED_Y= P2^0;
sbit FENG = P2^5;        //蜂鳴器
sbit san=P3^4;                //風扇
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
sbit A0=P3^1;                //0809A0地址腳
//按鍵
sbit Key1=P2^6;                //設置鍵
sbit Key2=P2^7;                //加鍵
sbit Key3=P3^7;                //減鍵
bit bdata flag4,flag138;
uchar set;
//函數聲明
extern uchar ADC0809();
extern void Key();
/*
ID:749061 發表于 2020-5-11 14:27
程序開頭沒有使用宏定義 #define uchar unsigned char
ID:748796 發表于 2020-5-11 12:31
木木de 發表于 2020-5-11 11:29
uchar不是標準的變量類型,可以改為unsigned char

這是原程序,用的是keil uVersion4版本。
ID:748796 發表于 2020-5-11 12:30
木木de 發表于 2020-5-11 11:29
uchar不是標準的變量類型,可以改為unsigned char

//程序頭函數
#include <reg52.h>
sbit LED_R= P2^2;        //COled
sbit LED_Y= P2^0;
sbit FENG = P2^5;        //蜂鳴器
sbit san=P3^4;                //風扇
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
sbit A0=P3^1;                //0809A0地址腳
//按鍵
sbit Key1=P2^6;                //設置鍵
sbit Key2=P2^7;                //加鍵
sbit Key3=P3^7;                //減鍵
bit bdata flag4,flag138;
uchar set;
//函數聲明
extern uchar ADC0809();
extern void Key();
/*
void delay(uint z)
{
        uint i,j;
        for(i=0;i<z;i++)
        for(j=0;j<121;j++);
}
*/
//
uchar MQ4=0,MQ138=0;                //讀取傳感器數據變量
//指示燈變量
uchar WARNING4=30,WARNING138=60;                //初始上限值
void init()                                 //定時器初始化函數
{
        TMOD=0x01;                          //工作方式采用16位定時方式,通過TR1置位啟動
        TL0=0xb0;           //這是給定時器T0設定時初值。分別給T0高8位,低8位送初值,這個值在12MHZ時,應該是定時50ms
        TH0=0x3c;                         //賦初值
        EA=1;                                 //打開中斷總開關
        ET0=1;                                //打開中斷允許開關
        TR0=1;                                //打開中斷定時開關
}

void main()                           //主函數
{
        Init1602();                   //初始化顯示函數
        init();                           //初始化定時器
        while(1)                   //進入循環
        {
                A0=0;                   //地址腳=0時,讀取MQ4數據                                                   
                MQ4=ADC0809();
                A0=1;                   //地址腳=1時,讀取MQ138數據
                MQ138=ADC0809();
                if(set==0)           //不在設置狀態時
                Display_1602(MQ4,MQ138,WARNING4,WARNING138); //正常顯示數據
                if(set==0)
                {
                        if(MQ4<WARNING4)           //判斷數據是否小于報警值
                        flag4=0;
                        else if(MQ4>WARNING4)
                        flag4=1;
                        if(MQ138<WARNING138)
                        flag138=0;
                        else if(MQ138>WARNING138)
                        flag138=1;                       
                }
                else
                {
                        flag4=0;flag138=0;
                }
                Key();                                                 //掃描按鍵函數
        }
}
//ADC0809讀取信息
uchar ADC0809()
{
        uchar temp_=0x00;
        OE=0;        //初始化高阻太
        ST=0;        //轉化初始化
        ST=1;        //開始轉換
        ST=0;
        while(EOC==0)        //外部中斷等待AD轉換結束
        OE=1;           //讀取轉換的AD值
        temp_=Data_ADC0809;
        OE=0;
        return temp_;
}

void Key()                          //按鍵函數
{
        if(Key1==0)                   //設置按鍵
        {
                while(Key1==0);//按鍵釋放
                FENG=0;                   //打開蜂鳴器
                set++;                   //設置變量加
                flag4=0;
                flag138=0;           //報警變量清零
                LED_Y=1;
                LED_R=1;           //關閉LED
                san=1;                   //關閉風扇
                TR0=0;                   //關閉定時器
        }
        if(set==1)                   //設置報警值
        {
                write_com(0x38);//屏幕初始化
                write_com(0x80+0x40+6);//位置
                   write_com(0x0f);//打開顯示 無光標 光標閃爍
                   write_com(0x06);//當讀或寫一個字符是指針后一一位
                FENG=1;

        }
        if(set==2)
        {
                write_com(0x38);//屏幕初始化
                write_com(0x80+0x40+15);//位置
                   write_com(0x0f);//打開顯示 無光標 光標閃爍
                   write_com(0x06);//當讀或寫一個字符是指針后一一位
                FENG=1;

        }
        else if(set>=3)                 //設置完
        {
                set=0;                         //清零
                write_com(0x38);//屏幕初始化
                write_com(0x0c);//打開顯示 無光標 無光標閃爍
                FENG=1;                        //關閉蜂鳴器
                TR0=1;                        //打開定時器
        }
        if(Key2==0&&set==1)        //加按鍵按下
        {
                while(Key2==0);                //按鍵釋放
                FENG=0;                                //打開蜂鳴器,做按鍵音
                WARNING4++;                                                //報警值加
                if(WARNING4>=255)                                //報警值加到最大
                WARNING4=0;                                                //報警值清零
                write_com(0x80+0x40+4);                        //選中位置顯示報警值
                write_data('0'+WARNING4/100);        //將報警值拆開成單獨的一位,顯示。例如報警值是123,那么123除以100的商是1,這里顯示的就是1
                write_data('0'+WARNING4/10%10);        //123除以10得到的商是12,,12除以10的余數就是2,這里顯示的就是2
                write_data('0'+WARNING4%10);        //123除以10的余數是3,這里顯示的就是3,數據+“0”是為了得到液晶中對應數字的顯示碼
                write_com(0x80+0x40+6);                        //閃爍的位置
                FENG=1;                                                        //關閉蜂鳴器
        }
        if(Key2==0&&set==2)                                        //注釋同上
        {
                while(Key2==0);
                FENG=0;
                WARNING138++;
                if(WARNING138>=255)
                WARNING138=0;
                write_com(0x80+0x40+13);
                write_data('0'+WARNING138/100);
                write_data('0'+WARNING138/10%10);
                write_data('0'+WARNING138%10);
                write_com(0x80+0x40+15);//位置
                FENG=1;
        }
        if(Key3==0&&set==1)
        {
                while(Key3==0);
                FENG=0;
                WARNING4--;
                if(WARNING4<=0)
                WARNING4=255;
                write_com(0x80+0x40+4);
                write_data('0'+WARNING4/100);
                write_data('0'+WARNING4/10%10);
                write_data('0'+WARNING4%10);
                write_com(0x80+0x40+6);//位置
                FENG=1;
        }
        if(Key3==0&&set==2)
        {
                while(Key3==0);
                FENG=0;
                WARNING138--;
                if(WARNING138<=0)
                WARNING138=255;
                write_com(0x80+0x40+13);
                write_data('0'+WARNING138/100);
                write_data('0'+WARNING138/10%10);
                write_data('0'+WARNING138%10);
                write_com(0x80+0x40+15);//位置
                FENG=1;
        }
}

void  time1_int(void) interrupt 1//定時器工作函數
{
        uchar count;                                 //定義變量用于定時         
        TL0=0xb0;
        TH0=0x3c;                                         //定時器重新賦初值50ms
          count++;                                         //變量50ms加一次
        if(count==10)                                 //加10次就是500ms
        {
                count=0;                                 //變量清零
                if(flag4==0)                         //報警關
                        LED_Y=1;                         //報警指示燈熄滅
                else                                         //報警開
                        LED_Y=0;                         //對應的報警指示燈點亮
                if(flag138==0)
                        LED_R=1;
                else
                        LED_R=0;
                if(flag4==1||flag138==1)         //有報警
                {
                        FENG=!FENG;                         //蜂鳴器閃爍報警
                        san=0;                                 //打開繼電器啟動風扇
                }
                if(flag4==0&&flag138==0)         //都沒有報警
                {
                        FENG=1;                                 //關閉蜂鳴器
                        san=1;                                 //關閉風扇
                }
        }
}
顯示
//宏定義
#define uint unsigned int
#define uchar unsigned char

//LCD管腳聲明
sbit LCDRS = P2^3;
sbit LCDEN= P2^4;

//初始畫時顯示的內容
uchar code Init1[]="MQ4:    MQ138 :   ";
uchar code Init2[]="H4 :    H138  :   ";

//LCD延時
void LCDdelay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=10;y>0;y--);
}
//寫命令
void write_com(uchar com)
{
  LCDRS=0;
  P0=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
//寫數據
void write_data(uchar date)
{
  LCDRS=1;
  P0=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
//1602初始化
void Init1602()
{
  uchar i=0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打開顯示 無光標 無光標閃爍
  write_com(0x06);//當讀或寫一個字符是指針后一一位
  write_com(0x01);//清屏
  write_com(0x80);//設置位置

  for(i=0;i<16;i++)
  {
                write_data(Init1);
  }                                                                  
  write_com(0x80+0x40);//設置位置         
  for(i=0;i<16;i++)
  {
                write_data(Init2);
  }
}

void Display_1602(uchar NOW_GAS,uchar NOW_CO,uchar SET_GAS,uchar SET_CO)
{

        write_com(0x80+4);
        write_data('0'+NOW_GAS/100);
        write_data('0'+NOW_GAS/10%10);
        write_data('0'+NOW_GAS%10);

        write_com(0x80+0x40+4);
        write_data('0'+SET_GAS/100);
        write_data('0'+SET_GAS/10%10);
        write_data('0'+SET_GAS%10);

        write_com(0x80+13);
        write_data('0'+NOW_CO/100);
        write_data('0'+NOW_CO/10%10);
        write_data('0'+NOW_CO%10);

        write_com(0x80+0x40+13);
        write_data('0'+SET_CO/100);
        write_data('0'+SET_CO/10%10);
        write_data('0'+SET_CO%10);
}
ID:748796 發表于 2020-5-11 12:28
//程序頭函數 #include <reg52.h> sbit LED_R= P2^2;        //COled sbit LED_Y= P2^0; sbit FENG = P2^5;        //蜂鳴器 sbit san=P3^4;                //風扇 //ADC0809 sbit ST=P3^3; sbit EOC=P3^6; sbit OE=P3^2; sbit A0=P3^1;                //0809A0地址腳 //按鍵 sbit Key1=P2^6;                //設置鍵 sbit Key2=P2^7;                //加鍵 sbit Key3=P3^7;                //減鍵 bit bdata flag4,flag138; uchar set; //函數聲明 extern uchar ADC0809(); extern void Key(); /* void delay(uint z) {         uint i,j;         for(i=0;i<z;i++)         for(j=0;j<121;j++); } */ // uchar MQ4=0,MQ138=0;                //讀取傳感器數據變量 //指示燈變量 uchar WARNING4=30,WARNING138=60;                //初始上限值 void init()                                 //定時器初始化函數 {         TMOD=0x01;                          //工作方式采用16位定時方式,通過TR1置位啟動          TL0=0xb0;           //這是給定時器T0設定時初值。分別給T0高8位,低8位送初值,這個值在12MHZ時,應該是定時50ms          TH0=0x3c;                         //賦初值          EA=1;                                 //打開中斷總開關         ET0=1;                                //打開中斷允許開關          TR0=1;                                //打開中斷定時開關 }  void main()                           //主函數 {         Init1602();                   //初始化顯示函數         init();                           //初始化定時器         while(1)                   //進入循環         {                 A0=0;                   //地址腳=0時,讀取MQ4數據                                                                    MQ4=ADC0809();                 A0=1;                   //地址腳=1時,讀取MQ138數據                 MQ138=ADC0809();                 if(set==0)           //不在設置狀態時                 Display_1602(MQ4,MQ138,WARNING4,WARNING138); //正常顯示數據                 if(set==0)                 {                         if(MQ4<WARNING4)           //判斷數據是否小于報警值                         flag4=0;                         else if(MQ4>WARNING4)                         flag4=1;                         if(MQ138<WARNING138)                         flag138=0;                         else if(MQ138>WARNING138)                         flag138=1;                                         }                 else                 {                         flag4=0;flag138=0;                 }                 Key();                                                 //掃描按鍵函數         } } //ADC0809讀取信息 uchar ADC0809() {         uchar temp_=0x00;         OE=0;        //初始化高阻太         ST=0;        //轉化初始化         ST=1;        //開始轉換         ST=0;         while(EOC==0)        //外部中斷等待AD轉換結束         OE=1;           //讀取轉換的AD值         temp_=Data_ADC0809;         OE=0;         return temp_; }  void Key()                          //按鍵函數 {         if(Key1==0)                   //設置按鍵         {                 while(Key1==0);//按鍵釋放                 FENG=0;                   //打開蜂鳴器                 set++;                   //設置變量加                 flag4=0;                 flag138=0;           //報警變量清零                 LED_Y=1;                 LED_R=1;           //關閉LED                 san=1;                   //關閉風扇                 TR0=0;                   //關閉定時器         }         if(set==1)                   //設置報警值         {                 write_com(0x38);//屏幕初始化                 write_com(0x80+0x40+6);//位置                    write_com(0x0f);//打開顯示 無光標 光標閃爍                    write_com(0x06);//當讀或寫一個字符是指針后一一位                 FENG=1;          }         if(set==2)         {                 write_com(0x38);//屏幕初始化                 write_com(0x80+0x40+15);//位置                    write_com(0x0f);//打開顯示 無光標 光標閃爍                    write_com(0x06);//當讀或寫一個字符是指針后一一位                 FENG=1;          }         else if(set>=3)                 //設置完         {                 set=0;                         //清零                 write_com(0x38);//屏幕初始化                 write_com(0x0c);//打開顯示 無光標 無光標閃爍                 FENG=1;                        //關閉蜂鳴器                 TR0=1;                        //打開定時器         }         if(Key2==0&&set==1)        //加按鍵按下         {                 while(Key2==0);                //按鍵釋放                 FENG=0;                                //打開蜂鳴器,做按鍵音                 WARNING4++;                                                //報警值加                 if(WARNING4>=255)                                //報警值加到最大                 WARNING4=0;                                                //報警值清零                 write_com(0x80+0x40+4);                        //選中位置顯示報警值                 write_data('0'+WARNING4/100);        //將報警值拆開成單獨的一位,顯示。例如報警值是123,那么123除以100的商是1,這里顯示的就是1                 write_data('0'+WARNING4/10%10);        //123除以10得到的商是12,,12除以10的余數就是2,這里顯示的就是2                 write_data('0'+WARNING4%10);        //123除以10的余數是3,這里顯示的就是3,數據+“0”是為了得到液晶中對應數字的顯示碼                 write_com(0x80+0x40+6);                        //閃爍的位置                 FENG=1;                                                        //關閉蜂鳴器         }         if(Key2==0&&set==2)                                        //注釋同上         {                 while(Key2==0);                 FENG=0;                 WARNING138++;                 if(WARNING138>=255)                 WARNING138=0;                 write_com(0x80+0x40+13);                 write_data('0'+WARNING138/100);                 write_data('0'+WARNING138/10%10);                 write_data('0'+WARNING138%10);                 write_com(0x80+0x40+15);//位置                 FENG=1;         }         if(Key3==0&&set==1)         {                 while(Key3==0);                 FENG=0;                 WARNING4--;                 if(WARNING4<=0)                 WARNING4=255;                 write_com(0x80+0x40+4);                 write_data('0'+WARNING4/100);                 write_data('0'+WARNING4/10%10);                 write_data('0'+WARNING4%10);                 write_com(0x80+0x40+6);//位置                 FENG=1;         }         if(Key3==0&&set==2)         {                 while(Key3==0);                 FENG=0;                 WARNING138--;                 if(WARNING138<=0)                 WARNING138=255;                 write_com(0x80+0x40+13);                 write_data('0'+WARNING138/100);                 write_data('0'+WARNING138/10%10);                 write_data('0'+WARNING138%10);                 write_com(0x80+0x40+15);//位置                 FENG=1;         } }  void  time1_int(void) interrupt 1//定時器工作函數 {         uchar count;                                 //定義變量用于定時                  TL0=0xb0;          TH0=0x3c;                                         //定時器重新賦初值50ms           count++;                                         //變量50ms加一次         if(count==10)                                 //加10次就是500ms         {                 count=0;                                 //變量清零                 if(flag4==0)                         //報警關                         LED_Y=1;                         //報警指示燈熄滅                 else                                         //報警開                         LED_Y=0;                         //對應的報警指示燈點亮                 if(flag138==0)                         LED_R=1;                 else                          LED_R=0;                 if(flag4==1||flag138==1)         //有報警                 {                         FENG=!FENG;                         //蜂鳴器閃爍報警                         san=0;                                 //打開繼電器啟動風扇                 }                 if(flag4==0&&flag138==0)         //都沒有報警                 {                         FENG=1;                                 //關閉蜂鳴器                         san=1;                                 //關閉風扇                 }         } } 顯示 //宏定義 #define uint unsigned int  #define uchar unsigned char  //LCD管腳聲明 sbit LCDRS = P2^3; sbit LCDEN= P2^4;  //初始畫時顯示的內容 uchar code Init1[]="MQ4:    MQ138 :   "; uchar code Init2[]="H4 :    H138  :   ";  //LCD延時 void LCDdelay(uint z) {   uint x,y;   for(x=z;x>0;x--)     for(y=10;y>0;y--); } //寫命令 void write_com(uchar com) {   LCDRS=0;   P0=com;   LCDdelay(5);   LCDEN=1;   LCDdelay(5);   LCDEN=0; } //寫數據 void write_data(uchar date) {   LCDRS=1;   P0=date;   LCDdelay(5);   LCDEN=1;   LCDdelay(5);   LCDEN=0; } //1602初始化 void Init1602() {   uchar i=0;   write_com(0x38);//屏幕初始化   write_com(0x0c);//打開顯示 無光標 無光標閃爍   write_com(0x06);//當讀或寫一個字符是指針后一一位   write_com(0x01);//清屏   write_com(0x80);//設置位置    for(i=0;i<16;i++)   {                 write_data(Init1[i]);   }                                                                     write_com(0x80+0x40);//設置位置            for(i=0;i<16;i++)   {                 write_data(Init2[i]);   } }  void Display_1602(uchar NOW_GAS,uchar NOW_CO,uchar SET_GAS,uchar SET_CO) {          write_com(0x80+4);         write_data('0'+NOW_GAS/100);         write_data('0'+NOW_GAS/10%10);         write_data('0'+NOW_GAS%10);          write_com(0x80+0x40+4);         write_data('0'+SET_GAS/100);         write_data('0'+SET_GAS/10%10);         write_data('0'+SET_GAS%10);          write_com(0x80+13);         write_data('0'+NOW_CO/100);         write_data('0'+NOW_CO/10%10);         write_data('0'+NOW_CO%10);          write_com(0x80+0x40+13);         write_data('0'+SET_CO/100);         write_data('0'+SET_CO/10%10);         write_data('0'+SET_CO%10); }
ID:76227 發表于 2020-5-11 11:29
uchar不是標準的變量類型,可以改為unsigned char

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区一区三区 | 黄色在线 | 国产精品久久久久久一区二区三区 | 色婷婷亚洲一区二区三区 | 日韩欧美国产一区二区三区 | 超碰97人人人人人蜜桃 | 亚洲一区不卡 | 一区二区三区四区在线播放 | 日韩久久精品电影 | av在线免费不卡 | 特级毛片爽www免费版 | 国产精品免费观看 | 国产高潮好爽受不了了夜色 | 成年人在线观看视频 | 欧美在线亚洲 | 黄色网址在线播放 | 亚洲人成人网 | 成人精品一区二区户外勾搭野战 | 久久亚洲国产精品 | 精品视频一区二区在线观看 | 日本久久精品视频 | 欧美一区二区三区视频 | 奇米超碰在线 | 岛国一区| 日中文字幕在线 | 欧美日韩一区精品 | 国产精品一区在线观看 | 一级黄色片一级黄色片 | 日韩久久精品电影 | 日本三级做a全过程在线观看 | 日韩欧美国产一区二区 | 成人精品网 | 国产1区2区在线观看 | 日韩羞羞 | 久久久久国产一区二区三区 | 国产精品久久网 | 午夜一区二区三区在线观看 | 日韩欧美二区 | 在线中文字幕日韩 | 99久久精品免费看国产四区 | 国产高清精品在线 |