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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

藍橋杯單片機開發第6屆省賽簡易溫度采集與控制裝置及源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:656536 發表于 2020-3-24 18:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <stc15f2k60s2.h>

sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;

sbit C1 = P4^4;
sbit C2 = P4^2;
sbit C3 = P3^5;
sbit C4 = P3^4;

unsigned char code LedChar[] = {
  0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
        0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0x7F
};
unsigned char LedBuff[8] = {
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
unsigned int num = 3525;   //接收按鍵數字
unsigned char max = 0,min = 0;
unsigned char temp;    //18B20溫度接收位
unsigned char mode_temp = 0;
unsigned int delay_Led = 0;  //Led閃爍時間間隔
bit mode_set = 0;   // 0 顯示溫度  1 設置溫度
bit flag_Led = 0;   // Led閃爍標志位

void Timer0Init(void);                //1毫秒@12.000MHz
void InitSystem();
void ConfigSMG();
void ScanKeys();
void Led_light();
void Setmode_Temp();
extern bit Start18B20();  //18B20初始化
extern unsigned char Get18B20Temp();  //獲取溫度

void main()
{
  InitSystem();
        Timer0Init();
        while(1)
        {
                Start18B20();
                Setmode_Temp();
          ConfigSMG();
                ScanKeys();
        }
}
/******HC573選擇函數*******/
void Select74HC573(unsigned char channel)
{
  switch(channel)
        {
          case 4:P2 = (P2&0x1F)|0x80;break;
                case 5:P2 = (P2&0x1F)|0xA0;break;
                case 6:P2 = (P2&0x1F)|0xC0;break;
                case 7:P2 = (P2&0x1F)|0xE0;break;
                default:P2 = (P2&0x1F)|0x00;break;
        }
}
/*******關閉LED和蜂鳴器、繼電器******/
void InitSystem()
{
  Select74HC573(5);
        P0 = 0x00;
        Select74HC573(4);
        P0 = 0xFF;
        Select74HC573(0);
}
/*******數碼管顯示******/
void ConfigSMG()
{
  if(mode_set==0)   //顯示溫度
        {
                temp = Get18B20Temp();
          LedBuff[0] = LedChar[16];
                LedBuff[1] = LedChar[mode_temp];
                LedBuff[2] = LedChar[16];
                LedBuff[3] = 0xFF;
                LedBuff[4] = 0xFF;
                LedBuff[5] = 0xFF;
                LedBuff[6] = LedChar[temp/10];
                LedBuff[7] = LedChar[temp%10];
        }
        else             //設置溫度范圍
        {
          LedBuff[0] = LedChar[16];
                LedBuff[1] = LedChar[max/10];
                LedBuff[2] = LedChar[max%10];
                LedBuff[3] = 0xFF;
                LedBuff[4] = 0xFF;
                LedBuff[5] = LedChar[16];
                LedBuff[6] = LedChar[min/10];
                LedBuff[7] = LedChar[min%10];
        }
}
/*******按鍵配置函數*******/
void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}
void ScanKeys()
{
  R1 = 0;
        R2 = R3 = R4 = 1;
        C1 = C2 = C3 = C4 = 1;
        if(C1==0)        //按鍵0
        {
          Delay1ms();
                if(C1==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 0;
                                if(num>9999)
                                        num = 0;
                        }
                  while(C1==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C2==0)    //按鍵1
        {
          Delay1ms();
                if(C2==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 1;
                                if(num>9999)
                                        num = 1;
                        }
                  while(C2==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C3==0)    //按鍵2
        {
          Delay1ms();
                if(C3==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 2;
                                if(num>9999)
                                        num = 2;
                        }
                  while(C3==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        R2 = 0;
        R1 = R3 = R4 = 1;
        C1 = C2 = C3 = C4 = 1;
        if(C1==0)      //按鍵3
        {
          Delay1ms();
                if(C1==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 3;
                                if(num>9999)
                                        num = 3;
                        }
                  while(C1==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C2==0)    //按鍵4
        {
          Delay1ms();
                if(C2==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 4;
                                if(num>9999)
                                        num = 4;
                        }
                  while(C2==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C3==0)    //按鍵5
        {
          Delay1ms();
                if(C3==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 5;
                                if(num>9999)
                                        num = 5;
                        }
                  while(C3==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        R3 = 0;
        R1 = R2 = R4 = 1;
        C1 = C2 = C3 = C4 = 1;
        if(C1==0)      //按鍵6
        {
          Delay1ms();
                if(C1==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 6;
                                if(num>9999)
                                        num = 6;
                        }
                  while(C1==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C2==0)    //按鍵7
        {
          Delay1ms();
                if(C2==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 7;
                                if(num>9999)
                                        num = 7;
                        }
                  while(C2==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C3==0)    //按鍵8
        {
          Delay1ms();
                if(C3==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 8;
                                if(num>9999)
                                        num = 8;
                        }
                  while(C3==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        R4 = 0;
        R1 = R2 = R3 = 1;
        C1 = C2 = C3 = C4 = 1;
        if(C1==0)      //按鍵9
        {
          Delay1ms();
                if(C1==0)
                {
                        if(mode_set)
                        {
                          num = num *10 + 9;
                                if(num>9999)
                                        num = 9;
                        }
                  while(C1==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C2==0)    //設置按鍵
        {
          Delay1ms();
                if(C2==0)
                {
                        mode_set = ~mode_set;
                  while(C2==0)
                        {
                          ConfigSMG();
                        }
                }
        }
        else if(C3==0)   //清除按鍵
        {
          Delay1ms();
                if(C3==0)
                {
                        if(mode_set)
                        {
                          num = 0;
                        }
                  while(C3==0)
                        {
                          ConfigSMG();
                        }
                }
        }
}
/******LED閃爍設置*******/
void Led_light()
{
  Select74HC573(4);
  if(mode_temp==0)
        {
          delay_Led = 800;
                if(flag_Led)
                {
                  flag_Led = 0;
                        P0 = 0xFE;  //打開LED1
                }
                else
                {
                  P0 = 0xFF;  //關閉LED1
                }
        }
        else if(mode_temp==1)
        {
          delay_Led = 400;
                if(flag_Led)
                {
                  flag_Led = 0;
                        P0 = 0xFE;  //打開LED1
                }
                else
                {
                  P0 = 0xFF;  //關閉LED1
                }
        }
        else if(mode_temp==2)
        {
          delay_Led = 200;
                if(flag_Led)
                {
                  flag_Led = 0;
                        P0 = 0xFE;  //打開LED1
                }
                else
                {
                  P0 = 0xFF;  //關閉LED1
                }
        }
        Select74HC573(0);
}

/******溫度區間設置******/
void Setmode_Temp()
{
  max = num/100;
        min = num%100;
        if(max>min)
        {
                if(temp<min)
                {
                        mode_temp = 0;
                        EA = 0;
                        Select74HC573(5);
                  P0 = 0x00;       //關閉繼電器
                        Select74HC573(0);
                        EA = 1;
                }
                else if(temp>max)
                {
                        mode_temp = 2;
                        EA = 0;
                        Select74HC573(5);
                  P0 = 0x10;       //打開繼電器
                        Select74HC573(0);
                        EA = 1;
                }
                else
                {
                        mode_temp = 1;
                        EA = 0;
                        Select74HC573(5);
                  P0 = 0x00;       //關閉繼電器
                        Select74HC573(0);
                        EA = 1;
                }
                Led_light();
        }
        else    //設置溫度錯誤
        {
          Select74HC573(4);
                P0 = 0xFD;     //LED2常亮
                Select74HC573(0);
                P0 = 0xFF;
        }
}
/*******數碼管動態刷新*******/
void ScanSMG()
{
  static unsigned char i = 0;
        P0 = 0xFF;
        Select74HC573(6);
        P0 = 0x01<<i;
        Select74HC573(7);
        P0 = LedBuff[i++];
        if(i>=8)
                i = 0;
        Select74HC573(0);
}
/*******定時器0配置******/
void Timer0Init(void)                //1毫秒@12.000MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x18;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        ET0 = 1;
        EA = 1;
}
void InterruptTimer0()  interrupt 1
{
        static unsigned int cnt = 0;
  ScanSMG();
        cnt++;
        if(cnt>=delay_Led)
        {
          flag_Led = 1;
                cnt = 0;
        }
}

省賽試題-第6屆-簡易溫度采集與控制裝置.pdf

351.53 KB, 下載次數: 19, 下載積分: 黑幣 -5

第6屆溫度采集與控制_1.rar

47.18 KB, 下載次數: 29, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品视频在线免费观看 | 91精品国产91久久久久久吃药 | 国产综合网站 | 天天操,夜夜爽 | 精品一区二区三区在线观看 | 羞羞视频免费观看 | 日韩精品久久久 | 成年人免费在线视频 | 日韩精品久久 | 免费看的av | 在线视频亚洲 | 日韩在线播放一区 | 欧美日韩综合精品 | 在线视频一区二区 | 国产黄色一级片 | 欧美一区2区三区4区公司二百 | 国产高清在线观看 | 欧美国产91 | 亚洲国产18| 国产在线小视频 | 日韩欧美在线观看 | 亚洲一区视频在线 | 亚洲 精品 综合 精品 自拍 | 精品一区二区三区四区五区 | 国产精品久久一区二区三区 | 国产999精品久久久 午夜天堂精品久久久久 | 国产黄色电影 | 99热热热 | 81精品国产乱码久久久久久 | 国产精品1区2区3区 国产在线观看一区 | av网站免费观看 | 亚洲欧美一区二区三区视频 | 熟女毛片 | 欧美乱码精品一区二区三区 | 久久伊人青青草 | 日日艹夜夜艹 | 亚欧精品 | 久国产精品 | 免费国产一区 | av在线一区二区 | 久久青草av |