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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1678|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

大佬幫忙看一下單片機程序哪里出錯了,在此非常感謝

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:723220 發(fā)表于 2022-9-22 20:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//程序頭函數(shù)
#include <reg52.h>
//顯示函數(shù)
#include <display.h>
#include <intrins.h>
#include "eeprom52.h"
//宏定義
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1                //定義P1口為Data_ADC0809

//管腳聲明
sbit LED_R= P2^2;                          //紅色指示燈
sbit LED_G= P2^0;                          //綠色指示燈
sbit FENG = P2^5;                          //蜂鳴器
sbit san=P3^4;                                  //繼電器
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按鍵
sbit Key1=P2^6;
sbit Key2=P2^7;
sbit Key3=P3^7;

bit bdata flag;                                  //定義位變量
uchar set;                                          //設(shè)置變量


//函數(shù)聲明
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 temp=0;

//指示燈變量

uchar WARNING=25;                //報警值變量

/******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/
void write_eeprom()
{
        SectorErase(0x2000);
        byte_write(0x2000, WARNING);
        byte_write(0x2060, a_a);        
}

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

/**************開機自檢eeprom初始化*****************/
void init_eeprom()
{
        read_eeprom();                //先讀
        if(a_a != 1)                //新的單片機初始單片機內(nèi)問eeprom
        {
                WARNING   = 25;
                a_a = 1;
                write_eeprom();           //保存數(shù)據(jù)
        }        
}
void init()                                //定時器初始化函數(shù)
{
        TMOD=0x01;                        //定時器工作方式
         TL0=0xb0;
         TH0=0x3c;                        //賦初值50ms
         EA=1;                                //打開中斷總開關(guān)
        ET0=1;                                //打開定時器0中斷允許開關(guān)
         TR0=1;                                //打開定時器0定時開關(guān)
}

void main()                                //主函數(shù)
{
        Init1602();                                                 //初始化液晶函數(shù)
        init_eeprom();  //開始初始化保存的數(shù)據(jù)
        init();                                                         //初始化定時器
        while(1)                                                 //進入循環(huán)
        {
                temp=ADC0809();                                 //讀取AD數(shù)值
                if(set==0)                                         //set為0,說明現(xiàn)在不是設(shè)置狀態(tài)
                Display_1602(temp,WARNING);         //顯示AD數(shù)值和報警值
                if(temp<WARNING&&set==0)         //AD數(shù)值小于報警值
                {
                        flag=0;                                         //關(guān)閉報警
                }
                else if(temp>WARNING&&set==0)//AD值大于報警值
                {
                        flag=1;                                         //打開報警
                }
                Key();                                                 //調(diào)用按鍵函數(shù)
        }
}
//ADC0809讀取信息
uchar ADC0809()
{
        uchar temp_=0x00;
        //初始化高阻太

        OE=0;
        //轉(zhuǎn)化初始化
        ST=0;
        //開始轉(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_;
}

void Key()                                          //按鍵函數(shù)
{
        if(Key1==0)                                  //設(shè)置鍵按下
        {
                while(Key1==0);                  //按鍵松開
                FENG=0;                                  //蜂鳴器響
                set++;                                  //設(shè)置變量加
                flag=0;                                  //關(guān)閉報警
                san=1;                                  //關(guān)閉繼電器
                TR0=0;                                  //關(guān)閉定時器
        }
        if(set==1)                                  //設(shè)置報警值時
        {
                write_com(0x38);//屏幕初始化
                write_com(0x80+0x40+13);//位置
                   write_com(0x0f);//打開顯示 無光標 光標閃爍
                   write_com(0x06);//當讀或?qū)懸粋字符是指針后一一位
                FENG=1;                                //關(guān)閉蜂鳴器

        }
        else if(set>=2)                //設(shè)置完成時
        {
                set=0;                        //變量清零
                write_com(0x38);//屏幕初始化
                write_com(0x0c);//打開顯示 無光標 無光標閃爍
                FENG=1;                        //關(guān)閉蜂鳴器
                flag=1;                        //打開報警
                TR0=1;                        //打開定時器
        }
        if(Key2==0&&set!=0)                        //設(shè)置報警值時加鍵按下
        {
                while(Key2==0);                        //按鍵松開
                FENG=0;                                        //打開蜂鳴器
                WARNING++;                                //報警值加
                if(WARNING>=255)                //最大加到255
                WARNING=0;                                //清零
                write_com(0x80+0x40+11);           //選中液晶屏上的第二行第十一列
                write_data('0'+WARNING/100);   //開始顯示報警值。例如報警值是123,123除以100的商是1,加上‘0’是為了得到液晶中對應(yīng)1的顯示碼
                write_data('0'+WARNING%100/10);//123除以100的余數(shù)是23,23再除以10得到的商是2
                write_data('0'+WARNING%100%10);//23除以10的余數(shù)是3
                write_com(0x80+0x40+13);//位置
                FENG=1;                                                //關(guān)閉蜂鳴器
                write_eeprom();                           //保存數(shù)據(jù)
        }
        if(Key3==0&&set!=0)                                //注釋同加按鍵
        {
                while(Key3==0);
                FENG=0;
                WARNING--;
                if(WARNING<=0)
                WARNING=255;
                write_com(0x80+0x40+11);
                write_data('0'+WARNING/100);
                write_data('0'+WARNING/10%10);
                write_data('0'+WARNING%10);
                write_com(0x80+0x40+13);//位置
                FENG=1;
                write_eeprom();                           //保存數(shù)據(jù)
        }
}

void  time1_int(void) interrupt 1                  //定時器工作函數(shù)
{
        uchar count;                                                  //定義計時變量
        TL0=0xb0;
         TH0=0x3c;                                                          //重新賦初值50ms
          count++;                                                          //變量加一次就是50ms
        if(count==10)                                                  //加到10次就是500ms
        {
                if(flag==0)                                                  //flag=0時,也就是不開啟報警
                {
                        LED_G=0;                                          //綠燈點亮
                        LED_R=1;                                          //紅燈熄滅
                        FENG=1;                                                  //關(guān)閉蜂鳴器
                        san=1;                                                  //關(guān)閉繼電器
                }
                if(flag==1)                                                  //flag為1時,也就是打開報警
                {
                        LED_G=1;                                          //綠燈熄滅
                        LED_R=0;                                          //紅燈點亮
                        FENG=0;                                                  //打開蜂鳴器
                        san=0;                                                  //打開繼電器
                }
        }

           if(count==20)                                                  //計數(shù)20次,就是1s
           {                                                                          //在1s時,紅綠燈都是熄滅狀態(tài),蜂鳴器也是關(guān)閉狀態(tài),裝可以達到閃爍的目的
                count=0;                                                  //變量清零
                if(flag==0)                                                  //不是報警狀態(tài)時
                {
                        LED_G=1;
                        LED_R=1;
                        FENG=1;
                        san=1;                                                  //都關(guān)閉
                }
                if(flag==1)                                                  //報警狀態(tài)時
                {
                        LED_G=1;
                        LED_R=1;
                        FENG=1;
                        san=0;                                                  //繼電器一直吸和
                }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:94031 發(fā)表于 2022-9-23 09:31 | 只看該作者
缺 display.h,eeprom52.h 頭文件,缺 SectorErase 原型函數(shù)。
回復(fù)

使用道具 舉報

板凳
ID:1045628 發(fā)表于 2022-9-23 10:49 | 只看該作者
都沒說清除什么問題,不會是代碼問題吧,姑且認為頭文件和缺失的函數(shù)沒錯,如果代碼沒錯是沒辦法定位問題的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片免费看 | 国产1区在线 | 免费在线观看一级毛片 | 国产91丝袜在线播放 | 超碰av免费 | 颜色网站在线观看 | 日韩中文字幕高清 | 美女视频一区二区三区 | 啪啪综合网| 国产高清视频一区二区 | 91亚洲精品久久久电影 | 黄色大片免费播放 | 日韩欧美三级电影在线观看 | 欧美精品久久 | 久久久精品一区二区 | 中文字幕日韩欧美 | 欧美v免费 | 精品久久久久久久久亚洲 | 成人av在线网站 | 国产大片黄色 | 中文字幕电影在线观看 | 亚洲精选久久 | 精品亚洲一区二区三区四区五区 | 国产精品亚洲成在人线 | 九色一区| 久久久影院 | 亚洲综合在线一区二区 | 国产成人99久久亚洲综合精品 | 欧美一区二区在线 | 欧美日韩一区二区三区在线观看 | 国产免费一区二区三区 | 亚洲情综合五月天 | 欧美日韩在线观看一区 | 精品日韩一区 | 色综合天天天天做夜夜夜夜做 | 国产成人啪免费观看软件 | 中文字幕免费在线观看 | 欧美精品福利视频 | 国产小视频在线 | 中文字幕99| 91视频在线看 |