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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

藍橋杯單片機第七屆真題電風扇控制 含源碼,原理圖全套軟件硬件資料

[復制鏈接]
跳轉到指定樓層
樓主
這是我上個月做的藍橋杯第六屆的真題
用了2個小時左右的時間
附件里面包含藍橋杯單片機第七屆真題   含源碼,原理圖
整個程序是基于藍橋杯考試的板子CT107D來編寫的
現在又到了報名藍橋杯的日子,論壇里大一大二的朋友可以報名參加一下
高手請不要浪費時間于此
難度不大,省賽一等獎可以北京三日游,現在還可以報名參加
內容是結合自己的想法和學習前輩的編程經驗
請大家多多指教






單片機源程序如下:
  1. #include "stc15f2k60s2.h"
  2. #include "onewire.h"
  3. sbit buzzer=P0^6;
  4. unsigned char smg_d[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9
  5. unsigned char smg_w[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  6. unsigned char menu_index=1;//界面切換索引
  7. unsigned char menu1[8];//界面1顯示
  8. unsigned char mode=1; //三種模式,睡眠風,1,自然風,2,常風,3
  9. unsigned char remain_time=0; //倒計時顯示時間
  10. unsigned char menu2[8];//界面2 顯示,按下S7后出現
  11. unsigned char temp;//界面2顯示溫度
  12. //sbit pwm_output = P3^4 ; //pwm輸出
  13. bit key_flag=0;//按鍵按下的標志位
  14.                                    
  15. //矩陣鍵盤
  16. #define KEYPORT P3
  17. #define key_state_0 0
  18. #define key_state_1 1
  19. #define key_state_2 2

  20. char key_read()
  21. {        
  22.         static char key_state=0;
  23.         unsigned char k1,k2,key_press;
  24.         unsigned char key_return=0;

  25.         KEYPORT=0xf0;
  26.         k1=KEYPORT&0xf0;
  27.         KEYPORT=0x0f;
  28.         k2=KEYPORT&0x0f;

  29.         P44=1;P42=1;P35=1;P34=1;P33=0;P32=0;P31=0;P30=0;
  30.         if(P44==0)        k1=0x70;
  31.         if(P42==0)        k1=0xb0;
  32.         if(P35==0)        k1=0xd0;
  33.         if(P34==0)        k1=0xe0;
  34.         if((P44==1)&(P42==1)&(P35==1)&(P34==1))  k1        = 0xf0;

  35.         P44=0;P42=0;P35=0;P34=0;P33=1;P32=1;P31=1;P30=1;
  36.         if(P33==0)        k2=0x07;
  37.         if(P32==0)        k2=0x0b;
  38.         if(P31==0)        k2=0x0d;
  39.         if(P30==0)        k2=0x0e;
  40.         if((P33==1)&(P32==1)&(P31==1)&(P30==1))  k2        = 0x0f;
  41.         key_press=k1|k2;

  42.         switch(key_state)
  43.         {
  44.                 case key_state_0:
  45.                 if(key_press!=0xff)  key_state=key_state_1;
  46.                 break;

  47.                 case key_state_1:
  48.                 if(key_press!=0xff)
  49.                 {        
  50.                         if(key_press==0xee) key_return=19;
  51.                         if(key_press==0xed) key_return=18;
  52.                         if(key_press==0xeb) key_return=17;
  53.                         if(key_press==0xe7) key_return=16;

  54.                         if(key_press==0xde) key_return=15;
  55.                         if(key_press==0xdd) key_return=14;
  56.                         if(key_press==0xdb) key_return=13;
  57.                         if(key_press==0xd7) key_return=12;

  58.                         if(key_press==0xbe) key_return=11;
  59.                         if(key_press==0xbd) key_return=10;
  60.                         if(key_press==0xbb) key_return=9;
  61.                         if(key_press==0xb7) key_return=8;

  62.                         if(key_press==0x7e) key_return=7;
  63.                         if(key_press==0x7d) key_return=6;
  64.                         if(key_press==0x7b) key_return=5;
  65.                         if(key_press==0x77) key_return=4;
  66.                         
  67.                         key_state=key_state_2;
  68.                 }
  69.                 else
  70.                 key_state=key_state_0;
  71.                 break;
  72.                
  73.                 case key_state_2:
  74.                 if(key_press==0xff)key_state=key_state_0;
  75.                 break;

  76.         }
  77.         return key_return;
  78. }




  79. void Timer0Init(void)                //100微秒  @11.0592MHz
  80. {
  81.                 AUXR |= 0x80;                //定時器時鐘1T模式
  82.                 TMOD &= 0xF0;                //設置定時器模式
  83.                 TL0 = 0xAE;                        //設置定時初值
  84.                 TH0 = 0xFB;                        //設置定時初值
  85.                 TF0 = 0;                        //清除TF0標志
  86.                 TR0 = 1;                        //定時器0開始計        ?        
  87.                 ET0 = 1;
  88.                 EA=1;

  89. }

  90. main()
  91. {
  92.         unsigned char key_val;
  93.         P2=0XA0;buzzer=0;P2=0X00;
  94.         Timer0Init();

  95.         while(1)
  96.         {
  97.                 if(menu_index==2)
  98.                 {
  99.                         temp=read_temperature();        
  100.                 }

  101.                 menu1[0]=0x40;menu1[1]=smg_d[mode];
  102.                 menu1[2]=0x40;menu1[3]=0x00;
  103.                 menu1[4]=smg_d[remain_time/1000];menu1[5]=smg_d[remain_time/100%10];
  104.                 menu1[6]=smg_d[remain_time%100/10];menu1[7]=smg_d[remain_time%10];

  105.                 menu2[0]=0x40;menu2[1]=0x66;menu2[2]=0x40;
  106.                 menu2[3]=0x00;menu2[4]=0x00;
  107.                 menu2[5]=smg_d[temp/10];menu2[6]=smg_d[temp%10];
  108.                 menu2[7]=0x39;

  109.                 if(key_flag)
  110.                 {
  111.                         key_flag=0;
  112.                         key_val=key_read();
  113.                         switch(key_val)
  114.                         {
  115.                                 case 4 :        if(menu_index==1)
  116.                                                         {
  117.                                                                 mode++;
  118.                                                                 if(mode==4)
  119.                                                                 mode=1;
  120.                                                         }break;        
  121.                                 case 5 :        if(menu_index==1)
  122.                                                         {
  123.                                                                 if(remain_time<60)
  124.                                                                 remain_time+=60;
  125.                                                                 else remain_time=0;
  126.                                                         }break;
  127.                                 case 6 :          if(menu_index==1)
  128.                                                         {
  129.                                                                 remain_time=0;
  130.                                                         }break;
  131.                                 case 7 :    if(menu_index==1)
  132.                                                         {
  133.                                                                 menu_index=2;
  134.                                                     }
  135.                                                         else
  136.                                                         menu_index=1;
  137.                                                         break;
  138.                         }
  139.                 }
  140.         }
  141. }

  142. void tm0_isr() interrupt 1
  143. {
  144.         static char i;
  145.         static unsigned int sec_count=0,key_count=0,smg_count=0,pwm_count=0;
  146.         sec_count++;key_count++;smg_count++;pwm_count++;
  147.         
  148.         if(remain_time>0)
  149.         {
  150.                 if(mode==1)                   //模式1:睡眠風狀態下的PWM,20%占空比
  151.                 {
  152.                         P2=0X80;P0=0XFE;P2=0X00;
  153.                         if(pwm_count==8)  //1ms輸出一次PWM
  154.                         {
  155.                                 P34=1;
  156.                         }
  157.                         if(pwm_count==10)
  158.                         {
  159.                                 P34=0;
  160.                                 pwm_count=0;
  161.                         }
  162.                 }
  163.                
  164.                 if(mode==2)                   //模式2:自然風狀態下的PWM,30%占空比
  165.                 {
  166.                         P2=0X80;P0=0XFD;P2=0X00;                        
  167.                         if(pwm_count==7)  //1ms輸出一次PWM
  168.                         {
  169.                                 P34=1;
  170.                         }
  171.                         if(pwm_count==10)
  172.                         {
  173.                                 P34=0;
  174.                                 pwm_count=0;
  175.                         }
  176.                 }
  177.         
  178.                 if(mode==3)                   //模式3:常風狀態下的PWM,70%占空比
  179.                 {
  180.                         P2=0X80;P0=0XFB;P2=0X00;
  181.                         if(pwm_count==3)  //1ms輸出一次PWM
  182.                         {
  183.                                 P34=1;
  184.                         }
  185.                         if(pwm_count==10)
  186.                         {
  187.                                 P34=0;
  188.                                 pwm_count=0;
  189.                         }
  190.                 }

  191.         }
  192.         else
  193.         {
  194.                 P34=0;
  195.                 pwm_count=0;
  196.                 P2=0X80;P0=0XFF;P2=0X00;
  197.         }
  198.         
  199.         if(smg_count==30) //3ms掃描顯示一次數碼管
  200.         {
  201.                 smg_count=0;
  202. ……………………

  203. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
7.電風扇.zip (14.53 MB, 下載次數: 88)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:446580 發表于 2018-12-14 22:42 | 只看該作者
可以幫我改進哈嗎,有償,比這個簡單
回復

使用道具 舉報

板凳
ID:428027 發表于 2018-12-21 18:12 | 只看該作者
Ac007 發表于 2018-12-14 22:42
可以幫我改進哈嗎,有償,比這個簡單

改進啥?
回復

使用道具 舉報

地板
ID:484402 發表于 2019-3-5 21:34 | 只看該作者
數碼管那只打開了段選   并沒有打開位選
回復

使用道具 舉報

5#
ID:493120 發表于 2019-3-18 13:25 | 只看該作者
感謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aaaaaa大片免费看最大的 | 91色在线| 国产高清精品一区二区三区 | www.色综合| 91综合网| av夜夜操| 午夜在线观看视频 | 久久国产日韩欧美 | 另类视频区| 日韩a在线 | 91成人精品 | 人人射人人草 | 九九久久这里只有精品 | 黄色一级大片在线免费看产 | 日本精品一区二区三区在线观看 | 亚洲国产一区二区视频 | 久久久久久久久国产精品 | 欧美日韩精品在线一区 | 欧美三级电影在线播放 | 久久99国产精品久久99果冻传媒 | 中文字幕精品一区久久久久 | 日韩视频一区二区三区 | 国产视频三区 | 国产在线一区二区三区 | 看片网站在线 | 天天躁日日躁狠狠躁2018小说 | 波多野结衣一区二区三区在线观看 | 久久精品综合 | 在线日韩欧美 | 在线观看日本网站 | 精品一区二区三区四区 | 日韩欧美在线一区 | 国产美女视频黄 | 日韩久久久久 | www国产成人免费观看视频,深夜成人网 | 一区二区三区视频 | www.性色 | 欧美色综合一区二区三区 | 99精品视频在线观看 | 日韩免费在线观看视频 | 久久久久国产 |