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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

第十一屆藍橋杯單片機代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:909832 發表于 2021-4-28 21:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "stc15f2k60s2.h"
#include "iic.h"
#include "ds18b20.h"

                                                         //0    1    2    3    4   5   6     7    8    9   熄滅   C    P   
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc6,0x8C};


unsigned char dspbuf[8] = {10,10,10,10,10,10,10,10};  //顯示緩沖區
unsigned char dspcom=0;//數碼管碼段

unsigned char yi=10,er=10,san=10,si=10,wu=10,liu=10,qi=10,ba=10;

unsigned char key_temp;
unsigned char key_num;//鍵值
bit key_flag;//按鍵掃描標記位 10ms
unsigned char key_press;//消抖的標記變量
unsigned char key_value=0xff;
unsigned char key_re;
unsigned char intr;

bit s4_cnt=0;//按鍵s4切換狀態
bit s5_cnt=0;//按鍵s5切換狀態
bit flag_set=1;//進入設置狀態標記位

unsigned char T_min=20;//溫度下限值
unsigned char T_max=30;//溫度上限值
unsigned char Tmin;
unsigned char Tmax;
unsigned char temper=25;//實時溫度

unsigned char p_flag=0xff;
unsigned char t_cnt=0;

//上電初始化
void power_init()
{
        P2=0XA0;P0=0X00;
        P2=0X80;P0=0XFF;
        P2=0XC0;P0=0XFF;
        P2=0XE0;P0=0XFF;
}


void display()//數碼管顯示
{
        dspbuf[0]=yi;
        dspbuf[1]=er;
        dspbuf[2]=san;
        dspbuf[3]=si;
        dspbuf[4]=wu;
        dspbuf[5]=liu;
        dspbuf[6]=qi;
        dspbuf[7]=ba;

        P2=0x00;
        P0=0xff; //消隱
        P2=(0xE0|(P2&0x1f));
        P2&=0x1f;

        P0=0x01<<dspcom;
        P2=(0xC0|(P2&0x1f));
        P2&=0x1f;

        P0=tab[dspbuf[dspcom]];
        P2=(0xE0|(P2&0x1f));
        P2&=0x1f;

        if(++dspcom>=8)
        {
           dspcom=0;
        }
}

unsigned char read_keyboard(void)  //獨立按鍵
{
    static unsigned char col;

        P3 = 0xff;

    if((P3&0x0f)!=0x0f) //有按鍵按下 或者抖動
        key_press++;
        else
                key_press = 0;  

    if(key_press == 3)
    {
                key_press = 0;
                key_re = 1;
               
                if((P3 & 0x01) == 0)        col = 1;
                if((P3 & 0x02) == 0)        col = 2;
                if((P3 & 0x04) == 0)        col = 3;
                if((P3 & 0x08) == 0)        col = 4;
    }

        //連續三次檢測到按鍵被按下,并且該按鍵已經釋放
        P3 = 0xff;
        
    if(((key_re == 1) && ((P3&0x0f)==0x0f)))
    {
        key_re = 0;
                key_value=col;
        return key_value;
    }

    return 0xff;  //無按鍵按下或被按下的按鍵未被釋放
}


void Timer0Init(void)                //1毫秒@12.000MHz
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x20;                //設置定時初值
        TH0 = 0xD1;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        ET0=1;
        EA=1;
}



void timer0(void) interrupt 1        //定時器0的中斷處理函數          1ms
{
        display();//數碼管顯示

           if(++intr>=10)
        {
           intr=0;
           key_flag=1;
        }

        t_cnt++;
        if(s4_cnt==0)
        {
                yi=11,er=10,san=10,si=10,wu=10,liu=10,qi=temper/10,ba=temper%10;
        }
        else
        {
           yi=12,er=10,san=10,si=T_max/10,wu=T_max%10,liu=10,qi=T_min/10,ba=T_min%10;
        }

        if(s4_cnt==0&&flag_set==1)
        {
                flag_set=0;
                if(T_max<T_min)
                {         
                        T_max=Tmax;
                        T_min=Tmin;
                        p_flag=0xf7;
                }
                else
                {
                        Tmax=T_max;Tmin=T_min;
                        p_flag=0xff;
                }
        }
        else if(s4_cnt==1&&flag_set==0)
        {
                flag_set=1;
                Tmax=T_max;Tmin=T_min;
        }
        
}



void main()
{
        //上電初始化
        power_init();
        Timer0Init();
        
        while(1)
        {
                if(t_cnt>=200)
                {
                         t_cnt=0;
                        temper=rd_temperature();         //獲取溫度值

                        if(temper>Tmax)
                        {
                                 SetDACOut(204);
                                 P2=0X00;P0=0XFF;P2=0X80;P0=0XFE&p_flag;
                        }
                        else if(temper>=Tmin)
                        {
                                  SetDACOut(153);
                                  P2=0X00;P0=0XFF;P2=0X80;P0=0XFD&p_flag;
                        }
                        else
                        {
                                  SetDACOut(102);
                                  P2=0X00;P0=0XFF;P2=0X80;P0=0XFB&p_flag;
                        }
                }



                 if(key_flag)//按鍵標記10ms進來一次
                 {
                        key_flag=0;
                        key_temp=read_keyboard();
                        if(key_temp!=0xff) //有效按鍵
                        {
                                key_num=key_temp;
                                switch(key_num)
                                {
                                        case 1:           //s7                   -
                                                if(s4_cnt==1)
                                                {
                                                         if(s5_cnt==0)
                                                        {
                                                                if(T_min--<=0)
                                                                        T_min=0;
                                                        }
                                                        else
                                                        {
                                                                if(T_max--<=0)
                                                                        T_max=0;                                                        
                                                        }
                                                }
                                                break;
                                        case  2://s6                 +
                                                if(s4_cnt==1)
                                                {
                                                         if(s5_cnt==0)
                                                        {
                                                                if(++T_min>=100)
                                                                        T_min=99;
                                                        }
                                                        else
                                                        {
                                                                if(++T_max>=100)
                                                                        T_max=99;                                                        
                                                        }
                                                }
                                                break;
                                        case  3://s5
                                                s5_cnt=~s5_cnt;
                                                break;
                                        case  4://s4        界面切換
                                                 s4_cnt=~s4_cnt;
                                                break;
                                }
                        }
                }
        }
}
        




評分

參與人數 1黑幣 +10 收起 理由
haokey + 10 和我的代碼風格一樣,在定時器里計數++,按.

查看全部評分

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

使用道具 舉報

沙發
ID:569384 發表于 2021-5-5 10:54 | 只看該作者
可以直接去公司上班了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产农村妇女毛片精品久久麻豆 | 在线国产一区二区 | 欧美成人a | 99精品欧美一区二区三区综合在线 | 国产精品久久国产精品 | 干干天天 | 欧美一二三 | 91在线视频网址 | 99精品国自产在线 | 亚洲高清一区二区三区 | 精品一区二区视频 | 日韩免费网 | 国产高清视频一区 | 免费簧片视频 | 欧美日韩国产一区二区三区不卡 | 日韩av一二三区 | av先锋资源| 99re超碰| 国产精品久久99 | 亚洲一区二区视频 | 91九色在线观看 | a在线观看免费 | 精品亚洲一区二区三区四区五区 | 超级碰在线| 国产在线97| 亚洲精品大片 | 成人深夜福利在线观看 | 一级欧美 | 成人不卡视频 | 瑟瑟免费视频 | 午夜精品久久久久久久99黑人 | 欧美日韩国产高清 | 日本中文字幕一区 | 欧美区在线 | 亚洲精品在线观看网站 | 欧美一级二级视频 | 日韩精彩视频 | 99精品久久 | 91高清在线视频 | 国产成人一区二区 | 成年女人免费v片 |