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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機按鍵按著沒反應,各位大神來幫看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:257618 發表于 2017-12-10 22:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
代碼如下
實現功能:
上電自檢,數碼管 LED 全亮, 3 秒鐘后黑屏,然后蜂鳴器響 200mS;
(25 分)
2 按鍵 S4,顯示學號后四位;(15 分)
3 按下 S5, 測溫,即顯示當前溫度;
再次按下 S5,將溫度顯示為華氏溫度。(25 分)
4 按下 S6,存儲當前溫度;(15 分)
5 按下 S7,顯示存儲溫度;再次按下 S7,將溫度顯示為華氏溫度。  

卡在寫按鍵很久了,不知道哪有邏輯問題,大神幫忙看看

單片機源程序如下:
  1. #include<STC15F2K60S2.H>
  2. #include<onewire.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int      
  5.                  //  0    1    2    3    4    5    6    7    8    9    .   a     b    c    d    e   f   熄滅
  6. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xFF};
  7. uchar yi,er,san,si,wu ,liu,qi,ba,temp,b;
  8. int num=600;int nun=640;
  9. int ducunwendu[];
  10. void delayms(int ms);
  11. void allinit();
  12. int keycan();
  13. void Timer0Init(void);
  14. void display1(uchar yi,uchar er);
  15. void display2(uchar san,uchar si);
  16. void display3(uchar wu,uchar liu);
  17. void display4(uchar qi,uchar ba);

  18. void main()
  19. {float wendu;float huashi;int x;
  20.       
  21.         allinit();

  22.       
  23.         P0=0X00;
  24.         P2=0X80;
  25.         P0=0X00;
  26.       
  27.                                 Timer0Init();
  28.       
  29.         while(1)
  30.         {
  31.                 keycan();
  32.                 x=keycan();
  33.                 if(x==1)
  34.                 {
  35.                        
  36.                        
  37.                 }
  38.                 else if(x==2)
  39.                 {
  40.                        
  41.                        
  42.                 }
  43.                         else if(x==3)
  44.                 {
  45.             b++;
  46.                         if(b==1)
  47.                         {yi=17;er=17;san=17;si=17;wu=17;
  48.                         wendu=rd_temperature_f();
  49.                        
  50.                    wu=(int)(wendu/10)%10;
  51.              liu=(int)wendu%10;
  52.                         P2=0XFF;
  53.                        
  54.                        
  55.                    qi=(int)(wendu*10)%10;
  56.                        
  57.                     ba= 13;
  58.                        
  59.                     display1(yi,er);
  60.                     display2(san,si);
  61.                     display3(wu,liu);
  62.                           display3(wu,10);
  63.         display4(qi,ba);}
  64.                               
  65.                         if(b==2)
  66.                         {
  67.                                 yi=17;er=17;san=17;si=17;wu=17;
  68.                         wendu=rd_temperature_f();
  69.                         huashi=wendu*1.8+32;
  70.                    wu=(int)(huashi/10)%10;
  71.              liu=(int)huashi%10;
  72.                         P2=0XFF;
  73.                        
  74.                        
  75.                    qi=(int)(huashi*10)%10;
  76.                        
  77.                     ba= 13;
  78.                        
  79.                     display1(yi,er);
  80.                     display2(san,si);
  81.                     display3(wu,liu);
  82.                           display3(wu,10);
  83.         display4(qi,ba);
  84.                                 b=0;
  85.                         }
  86.       
  87.                
  88.                        
  89.                        
  90.                
  91.                        
  92.                 }
  93.                 else if(x==4)
  94.                 {yi=17;er=17;san=17;si=17;
  95.                         wu=8;liu=0;qi=3;ba=4;
  96.                         display1(yi,er);
  97.                 display2(san,si);
  98.                 display3(wu,liu);
  99.                 display4(qi,ba);
  100.                 }
  101.                
  102.         }
  103. }





  104. void delayms(int ms)
  105. {
  106.         int i,j;
  107.         for(i=ms;i>0;i--)
  108.                 for(j=845;j>0;j--);
  109. }

  110. void allinit()
  111. {
  112.         P2=0XA0;
  113.         P0=0X00;//關閉蜂鳴器,繼電器
  114.       
  115.         P2=0X80;
  116.         P0=0XFF;//關閉LED燈
  117.       
  118.         P2=0XC0;
  119.         P0=0XFF;//選擇所有數碼管
  120.         P2=0XFF;
  121.         P0=0XFF;//關閉所有數碼管
  122. }

  123. void display1(uchar yi,uchar er)
  124. {
  125.                 P2=0XC0;//打開位選573   U8
  126.                 P0=0X01;//選擇第一個數碼管
  127.                 P2=0XFF;//打開段選573   U7
  128.                 P0=tab[yi];
  129.                 delayms(1);
  130.                
  131.                 P2=0XC0;//打開位選573   U8
  132.                 P0=0X02;//選擇第二個數碼管
  133.                 P2=0XFF;//打開段選573   U7
  134.                 P0=tab[er];
  135.                 delayms(1);
  136. }      

  137. void display2(uchar san,uchar si)
  138. {
  139.                 P2=0XC0;//打開位選573   U8
  140.                 P0=0X04;//選擇第三個數碼管
  141.                 P2=0XFF;//打開段選573   U7
  142.                 P0=tab[san];
  143.                 delayms(1);
  144.                
  145.                 P2=0XC0;//打開位選573   U8
  146.                 P0=0X08;//選擇第四個數碼管
  147.                 P2=0XFF;//打開段選573   U7
  148.                 P0=tab[si];
  149.                 delayms(1);
  150. }

  151. void display3(uchar wu,uchar liu)
  152. {
  153.                 P2=0XC0;//打開位選573   U8
  154.                 P0=0X10;//選擇第一個數碼管
  155.                 P2=0XFF;//打開段選573   U7
  156.                 P0=tab[wu];
  157.                 delayms(1);
  158.                
  159.                 P2=0XC0;//打開位選573   U8
  160.                 P0=0X20;//選擇第一個數碼管
  161.                 P2=0XFF;//打開段選573   U7
  162.                 P0=tab[liu];
  163.                 delayms(1);
  164. }

  165. void display4(uchar qi,uchar ba)
  166. {
  167.                 P2=0XC0;//打開位選573   U8
  168.                 P0=0X40;//選擇第一個數碼管
  169.                 P2=0XFF;//打開段選573   U7
  170.                 P0=tab[qi];
  171.                 delayms(1);
  172.                
  173.                 P2=0XC0;//打開位選573   U8
  174.                 P0=0X80;//選擇第一個數碼管
  175.                 P2=0XFF;//打開段選573   U7
  176.                 P0=tab[ba];
  177.                 delayms(1);
  178. }





  179. void Timer0Init(void)                //5毫秒@11.0592MHz
  180. {
  181.         AUXR |= 0x80;                //定時器時鐘1T模式
  182.         TMOD &= 0xF0;                //設置定時器模式
  183.         TL0 = 0x00;                //設置定時初值
  184.         TH0 = 0x28;                //設置定時初值
  185.         TF0 = 0;                //清除TF0標志
  186.         TR0 = 1;
  187. EA=1;
  188. ET0=1;        //定時器0開始計時
  189. }

  190. void Timer0() interrupt 1
  191. {
  192.         num--;
  193. nun--;
  194.         if(num==0)
  195.         {
  196.       
  197.                 P0=0XFF;
  198.                 P2=0XFF;
  199.                 P0=0XFF;
  200.                 P2=0XA0;
  201.                 P0=0X40;
  202.         }
  203.         if(nun==0)
  204.         {P0=0X00;}
  205. }

  206. int keycan()
  207. {int s1=0;
  208.         P3=0x7f;P4=0xef;
  209.         temp=P3;
  210.         if(P3!=0x7f)
  211.         {
  212.                 delayms(5);
  213.                 temp=P3;
  214.                 if(P3!=0x7f)
  215.                 {
  216.                         switch(temp)
  217.                         {
  218.                                 case 0x7e : s1=1; break;
  219.                                 case 0x7d : s1=2; break;
  220.                                 case 0x7b : s1=3; break;
  221.                                 case 0x77 : s1=4; break;
  222.                         }
  223.                         while(temp!=0x7f)
  224.                         {
  225.                                 temp=P3;
  226.                                 delayms(5);
  227.                         }
  228.                 }
  229.         }
  230.         return s1;
  231. }
復制代碼

評分

參與人數 1黑幣 +5 收起 理由
馬騳骉 + 5 回帖助人的獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人一区二区三区 | 午夜影院中文字幕 | 国产日韩精品一区 | 久草青青 | 精品免费视频一区二区 | 美女午夜影院 | 国产精品久久久免费 | 日本黄色免费视频 | 天天做日日做 | 久久伊人精品 | 日日日干干干 | 在线免费观看日本 | 欧美国产精品一区二区 | 91av视频| 日韩影院在线 | 欧美日韩精品免费观看 | 色资源站| 国户精品久久久久久久久久久不卡 | 欧美视频一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 国产欧美一区二区三区另类精品 | 99r在线 | 在线国产一区二区 | 性色av网站 | 国产日产精品一区二区三区四区 | 毛片毛片毛片毛片 | 91在线精品秘密一区二区 | 国产97碰免费视频 | 亚洲三区在线观看 | 国产视频精品在线 | 99久久夜色精品国产亚洲96 | 亚欧午夜 | 97高清国语自产拍 | 欧美影院| 四虎在线视频 | 一级片成人 | 日韩在线精品强乱中文字幕 | 日本三级日产三级国产三级 | 婷婷毛片| 午夜在线视频一区二区三区 | 欧美中文字幕一区 |