找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1372|回复: 0
打印 上一主题 下一主题
收起左侧

2014届蓝桥杯温度采集答案

[复制链接]
跳转到指定楼层
楼主
ID:244223 发表于 2018-6-4 22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2014届蓝桥杯答案

单片机源程序如下:
  1. #include<stc15f2k60s2.h>
  2. #include "ds18b20.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.        
  6. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//小数点 &0x7f

  7. /**********************定义的变量*******************************/
  8. bit flag=0;
  9. uchar q,i;
  10. uchar num=0;
  11. uchar an;
  12. bit o=0;
  13. bit she=0;
  14. bit qing=0;
  15. uchar wendu;
  16. uchar shang=30;
  17. uchar xia=25;
  18. uchar yi,er,san,si,wu,liu,qi,ba;

  19. /*************************定义的变量****************************/

  20. /******************函数声明********************/
  21. void init();
  22. void keyscan16();
  23. void Timer0Init();
  24. void delayms(int ms);
  25. void display1(uchar yi,uchar er);
  26. void display2(uchar san,uchar si);
  27. void display3(uchar wu,uchar liu);
  28. void display4(uchar qi,uchar ba);

  29. /******************函数声明********************/

  30. void main()
  31. {
  32.         init();
  33.         Timer0Init();
  34.         yi=10;er=1;san=10;si=11;wu=11;liu=11;qi=wendu/10;ba=wendu%10;
  35.         while(1)
  36.         {
  37.                 if(she==0)
  38.                 {
  39.                         wendu=Tempget();  //调用**************************
  40.                         if((wendu>=xia)&&(wendu<=shang))q=1;
  41.                         else if(wendu<xia)              q=0;                       
  42.                         else if(wendu>shang)            q=2;
  43.                         if(q==0)
  44.                         {
  45.                                 P2=0XA0;
  46.                                 P0=0X00;
  47.                         }
  48.                         else if(q==1)
  49.                         {
  50.                                 P2=0XA0;
  51.                                 P0=0X00;
  52.                         }
  53.                         else if(q==2)
  54.                         {
  55.                                 P2=0XA0;
  56.                                 P0=0X10;
  57.                         }
  58.                         yi=10;er=q;san=10;si=11;wu=11;liu=11;qi=wendu/10;ba=wendu%10;// -1-***28
  59.                 }
  60.                 else if(she==1)
  61.                 {
  62.                                                 if(qing==1)
  63.                                                 {
  64.                                                         qing=0;
  65.                                                         yi=10;er=11;san=11;si=11;wu=11;liu=10;qi=11;ba=11;
  66.                                                        
  67.                                                 }
  68.                                                 if(er==11&&o==1)
  69.                                                 {
  70.                                                         er=an;o=0;
  71.                                                 }
  72.                                                 else if(san==11&&o==1)
  73.                                                 {
  74.                                                         san=an;o=0;
  75.                                                 }
  76.                                                 else if(qi==11&&o==1)
  77.                                                 {
  78.                                                         qi=an;o=0;
  79.                                                 }
  80.                                                 else if(ba==11&&o==1)
  81.                                                 {
  82.                                                         ba=an;o=0;
  83.                                                         shang=er*10+san;
  84.                                                         xia=qi*10+ba;
  85.                                                         if(shang<xia)
  86.                                                         {
  87.                                                                 P2=0X80;  //LED2亮
  88.                                                                 P0=0XFD;
  89.                                                                 yi=10;er=11;san=11;si=11;wu=11;liu=10;qi=11;ba=11;
  90.                                                         }                               
  91.                                                 }
  92.                                                        
  93.                 }
  94.                 keyscan16();                       
  95.                 display1(yi,er);
  96.                 display2(san,si);
  97.                 display3(wu,liu);
  98.                 display4(qi,ba);
  99.         }
  100. }
  101. void init()
  102. {
  103.         P2=0XA0;
  104.         P0=0X00;
  105.        
  106.         P2=0X80;  
  107.         P0=0XFF;
  108.        
  109.         P2=0XC0;  
  110.         P0=0XFF;               
  111.         P2=0XFF;                  
  112.         P0=0XFF;                  
  113. }

  114. void delayms(int ms)  
  115. {
  116.         int i,j;
  117.         for(i=ms;i>0;i--)
  118.                 for(j=845;j>0;j--);  
  119. }

  120. void Timer0Init(void)                //5毫秒@11.0592MHz
  121. {
  122.         AUXR |= 0x80;                //定时器时钟1T模式
  123.         TMOD &= 0xF0;                //设置定时器模式
  124.         TL0 = 0x00;                //设置定时初值
  125.         TH0 = 0x28;                //设置定时初值
  126.         TF0 = 0;                //清除TF0标志
  127.         TR0 = 1;                //定时器0开始计时
  128.         ET0=1;
  129.         EA=1;
  130. }
  131. void timer0()interrupt 1  //定时器0中断
  132. {
  133.         num++;
  134.         if(num==160&&q==0)
  135.         {
  136.                 num=0;
  137.                 if(flag==0){flag=1;P2=0X80;P0=0XFE;}
  138.                 else if(flag==1){flag=0;P2=0X80;P0=0XFF;}
  139.         }
  140.         if(num==80&&q==1)
  141.         {
  142.                 num=0;
  143.                 if(flag==0){flag=1;P2=0X80;P0=0XFE;}
  144.                 else if(flag==1){flag=0;P2=0X80;P0=0XFF;}
  145.         }
  146.         if(num==40&&q==2)
  147.         {
  148.                 num=0;
  149.                 if(flag==0){flag=1;P2=0X80;P0=0XFE;}
  150.                 else if(flag==1){flag=0;P2=0X80;P0=0XFF;}
  151.         }
  152. }
  153.         void keyscan16()//矩阵键盘
  154.         {
  155.                 uchar temp;
  156.                 P44=0;P42=1;P3=0X7F;   //第一列
  157.                 temp=P3;
  158.                 temp&=0x0f;
  159.                 if(temp!=0x0F)
  160.                 {
  161.                         delayms(5);
  162.                         temp=P3;
  163.                         temp&=0x0F;
  164.                         if(temp!=0x0F)
  165.                         {
  166.                                 temp=P3;
  167.                                 switch(temp)
  168.                                 {
  169.                                         case 0x7E:an=0;o=1 ;break; //S7
  170.                                         case 0x7D:an=3;o=1 ;break; //S6
  171.                                         case 0x7B:an=6;o=1 ;break; //S5
  172.                                         case 0x77:an=9;o=1 ;break; //S4
  173.                                 }
  174.                                 while(temp!=0x0f)
  175.                                 {
  176.                                         temp=P3;
  177.                                         temp&=0x0f;
  178.                                 }
  179.                         }       
  180.                 }
  181.                
  182.                 P44=1;P42=0;P3=0XBF;  //第二列
  183.                 temp=P3;
  184.                 temp&=0x0f;
  185.                 if(temp!=0x0F)
  186.                 {
  187.                         delayms(5);
  188.                         temp=P3;
  189.                         temp&=0x0F;
  190.                         if(temp!=0x0F)
  191.                         {
  192.                                 temp=P3;
  193.                                 switch(temp)
  194.                                 {
  195.                                         case 0xBE:an=1;o=1;break; //S7
  196.                                         case 0xBD:an=4;o=1;break; //S6
  197.                                         case 0xBB:an=7;o=1;break; //S5
  198.                                         case 0xB7:
  199.                                                 if(she==0)
  200.                                                 {
  201.                                                         she=1;
  202.                                                         ET0=0;EA=0;
  203.                                                         P2=0X80;P0=0XFF;P2=0XA0;P0=0X00;
  204.                                                         yi=10;er=11;san=11;si=11;wu=11;liu=10;qi=11;ba=11;
  205.                                                        
  206.                                                 }
  207.                                           else if(she==1)
  208.                                                 {
  209.                                                         P2=0X80;P0=0XFF;
  210.                                                         she=0;ET0=1;EA=1;       
  211.                                                         shang=er*10+san;
  212.                                                         xia=qi*10+ba;
  213.                                                 }
  214.                                                                                                  break; //S4
  215.                                 }
  216.                                 while(temp!=0x0f)
  217.                                 {
  218.                                         temp=P3;
  219.                                         temp&=0x0f;
  220.                                 }
  221.                         }       
  222.                 }
  223.                 P44=1;P42=1;P3=0XDF;  //第三列
  224.                 temp=P3;
  225.                 temp&=0x0f;
  226.                 if(temp!=0x0F)
  227.                 {
  228.                         delayms(5);
  229.                         temp=P3;
  230.                         temp&=0x0F;
  231.                         if(temp!=0x0F)
  232.                         {
  233.                                 temp=P3;
  234.                                 switch(temp)
  235.                                 {
  236.                                         case 0xDE:an=2;o=1;break; //S7
  237.                                         case 0xDD:an=5;o=1;break; //S6
  238.                                         case 0xDB:an=8;o=1;break; //S5
  239.                                         case 0xD7:qing=1;break; //S4
  240.                                 }
  241.                                 while(temp!=0x0f)
  242.                                 {
  243.                                         temp=P3;
  244.                                         temp&=0x0f;
  245.                                 }
  246.                         }       
  247.                 }
  248.         }
  249. void display1(uchar yi,uchar er)
  250. {
  251.         P2=0XC0;
  252.         P0=0X01;
  253.         P2=0XFF;
  254.         P0=tab[yi];
  255.         delayms(1);
  256.        
  257.         P2=0XC0;
  258.         P0=0X02;
  259.         P2=0XFF;
  260.         P0=tab[er];
  261.         delayms(1);
  262. }
  263. void display2(uchar san,uchar si)
  264. {
  265.         P2=0XC0;
  266.         P0=0X04;
  267.         P2=0XFF;
  268.         P0=tab[san];
  269.         delayms(1);
  270.        
  271.         P2=0XC0;
  272.         P0=0X08;
  273.         P2=0XFF;
  274.         P0=tab[si];
  275.         delayms(1);
  276. }
  277. void display3(uchar wu,uchar liu)
  278. {
  279.         P2=0XC0;
  280.         P0=0X10;
  281.         P2=0XFF;
  282.         P0=tab[wu];
  283.         delayms(1);
  284.        
  285.         P2=0XC0;
  286. ……………………

  287. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
2014-温度采集.rar (36.4 KB, 下载次数: 17)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表