亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 這是我的單片機(jī)酒精探測(cè)儀的程序代碼,給大家互相學(xué)習(xí)一下 [打印本頁(yè)]

作者: ythyth    時(shí)間: 2021-10-18 15:07
標(biāo)題: 這是我的單片機(jī)酒精探測(cè)儀的程序代碼,給大家互相學(xué)習(xí)一下
//程序頭函數(shù)
#include <reg52.h>
//顯示函數(shù)
#include <display.h>
#include <intrins.h>
#include "eeprom52.h"
#include "temp.h"

//宏定義
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1

//管腳聲明
sbit P34=P3^4;//溫度
sbit LED_R= P2^2; //紅指示燈
sbit LED_G= P2^0; //綠色指示燈
sbit FENG = P2^5; //蜂鳴器
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按鍵
sbit Key1=P2^6;        //設(shè)置按鍵
sbit Key2=P2^7; //加
sbit Key3=P3^7;        //減
bit bdata flag;//指示燈和蜂鳴器閃爍報(bào)警標(biāo)志位
uchar set;          //設(shè)置標(biāo)志位


//函數(shù)聲明
extern uchar ADC0809();
extern void Key();

//酒精含量變量
unsigned int temp=0;
unsigned int WARNING=25; // 初始報(bào)警值
/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
void write_eeprom()
{
        SectorErase(0x2000);
        byte_write(0x2000, WARNING);
        byte_write(0x2060, a_a);        
}

/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來(lái)*****************/
void read_eeprom()
{
        WARNING   = byte_read(0x2000);
        a_a      = byte_read(0x2060);
}

/**************開(kāi)機(jī)自檢eeprom初始化*****************/
void init_eeprom()
{
        read_eeprom();                //先讀
        if(a_a != 1)                //新的單片機(jī)初始單片機(jī)內(nèi)問(wèn)eeprom
        {
                WARNING=25;
                a_a = 1;
                write_eeprom();           //保存數(shù)據(jù)
        }        
}
//初始化函數(shù)
void init()         
{
        TMOD=0x01; //定時(shí)器0方式1
         TL0=0xb0;
         TH0=0x3c;
        TL1=65000/256;
        TH1=65000/256;  //賦初值
         EA=1;        //開(kāi)總中斷
        ET0=1;        //允許定時(shí)器0中斷
         TR0=1;        //定時(shí)器0開(kāi)
}
//主函數(shù)
void main()
{
        Init1602();        //1602初始化
        init_eeprom();  //開(kāi)始初始化保存的數(shù)據(jù)
        init();         //初始化函數(shù)
        while(1)//主循環(huán)
        {
                if(set==0) //如果沒(méi)有按下設(shè)置(默認(rèn)set是0,就是正常顯示狀態(tài))
                {
                        temp=ADC0809();        //讀取酒精值
                        Display_1602(temp,WARNING,ReadTemperature());         //顯示酒精值
                }
                if(temp<WARNING&&set==0)        //如果實(shí)際的酒精值小于報(bào)警值且在正常顯示狀態(tài)下
                {
                        flag=0;         //執(zhí)行下面flag=0的(主要就是綠燈閃,關(guān)蜂鳴器和繼電器)
                }
                else if(temp>WARNING&&set==0)  //如果實(shí)際的酒精值大于報(bào)警值且在正常顯示狀態(tài)下
                {
                        flag=1;        //執(zhí)行下面flag=1的(主要就是紅燈閃,開(kāi)蜂鳴器和繼電器)
                }
                Key();//按鍵掃描
        }
}
//ADC0809讀取信息
uchar ADC0809()
{
        uchar temp_=0x00;
        //初始化高阻太

        OE=0;
        //轉(zhuǎn)化初始化
        ST=0;
        //開(kāi)始轉(zhuǎn)換
        ST=1;
        ST=0;
        //外部中斷等待AD轉(zhuǎn)換結(jié)束
        while(EOC==0)
        //讀取轉(zhuǎn)換的AD值
        OE=1;
        temp_=Data_ADC0809;
        OE=0;
        return temp_;
}
//按鍵函數(shù)
void Key()
{
        if(Key1==0)        //如果設(shè)置按鍵按下
        {
                while(Key1==0);//等待按鍵釋放
                FENG=0;        //蜂鳴器響
                set++;        //設(shè)置的變量加1
                flag=0;        //綠燈閃
                TR0=0;        //關(guān)定時(shí)器0
                write_com(0x0f);//打開(kāi)顯示 無(wú)光標(biāo) 光標(biāo)閃爍
                write_com(0x80+15);//位置
//                   write_com(0x06);//當(dāng)讀或?qū)懸粋(gè)字符是指針后一一位
                FENG=1;        //蜂鳴器關(guān)
        }
        if(set>=2)        //又按了下設(shè)置
        {
                set=0;        //正常顯示狀態(tài)
//                write_com(0x38);//屏幕初始化
                write_com(0x0c);//打開(kāi)顯示 無(wú)光標(biāo) 無(wú)光標(biāo)閃爍
                FENG=1;        //蜂鳴器關(guān)
                flag=1;        //紅燈閃
                TR0=1;        //定時(shí)器0開(kāi)
        }
        if(Key2==0&&set!=0)          //在設(shè)置的狀態(tài)下按下加
        {
                while(Key2==0);          //等待按鍵釋放
                FENG=0;                //蜂鳴器響
                WARNING++;        //報(bào)警值加1
                if(WARNING>=255)  //如果報(bào)警值大于等于255
                WARNING=0;                 //報(bào)警值歸零
                write_com(0x80+13);
                write_data('0'+WARNING/100);
                write_data('0'+WARNING/10%10);
                write_data('0'+WARNING%10);           //顯示報(bào)警值
                //write_com(0x80+0x40+13);//調(diào)整位置
                FENG=1;         //蜂鳴器關(guān)
                write_eeprom();                           //保存數(shù)據(jù)
        }
        if(Key3==0&&set!=0)         //在設(shè)置的狀態(tài)下按下減
        {
                while(Key3==0);         //等待按鍵釋放
                FENG=0;                 //蜂鳴器響
                WARNING--;         //報(bào)警值減1
                if(WARNING<=0)        //如果報(bào)警值小于等于0
                WARNING=255;        //那么報(bào)警值為255
                write_com(0x80+13);
                write_data('0'+WARNING/100);
                write_data('0'+WARNING/10%10);
                write_data('0'+WARNING%10);
                //write_com(0x80+0x40+13);//調(diào)整位置
                FENG=1;         //蜂鳴器關(guān)
                write_eeprom();                           //保存數(shù)據(jù)
        }
}

void  time1_int(void) interrupt 1 //定時(shí)器中斷0
{
        uchar count;
        TL0=0xb0;
         TH0=0x3c;  //重賦初值50ms
          count++;  ///溢出值加1
        if(count==10)  //如果時(shí)間到半秒
        {
                if(flag==0)          //如果flag為0
                {
                        LED_G=0;  //綠燈亮
                        LED_R=1;  //紅燈滅
                        FENG=1;          //蜂鳴器關(guān)
                }
                if(flag==1)           //如果flag為1
                {
                        LED_G=1;   //綠燈關(guān)
                        LED_R=0;   //紅燈亮
                        FENG=0;           //蜂鳴器開(kāi)
                }
        }

           if(count==20)          //如果時(shí)間到1秒
           {
                count=0;          //溢出值清零
                if(flag==0)         //如果flag為0
                {
                        LED_G=1;        //綠燈關(guān)
                        LED_R=1;        //紅燈滅
                        FENG=1;           //蜂鳴器關(guān)
                }
                if(flag==1)           //如果flag為1
                {
                        LED_G=1;   //綠燈關(guān)
                        LED_R=1;        //紅燈滅
                        FENG=1;           //蜂鳴器關(guān)
                }
        }
}






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