找回密码
 立即注册

QQ登录

只需一步,快速开始

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

2015届蓝桥杯答案

[复制链接]
跳转到指定楼层
楼主
ID:244223 发表于 2018-6-4 22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2015届蓝桥杯答案
单片机源程序如下:
  1. #include<stc15f2k60s2.h>
  2. #include "ds18b20.h"
  3. #include <ds1302.h>
  4. #define uchar unsigned char
  5. #define  uint unsigned int
  6.        
  7. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//小数点 &0x7f

  8. extern uchar shijian[];
  9. /**********************定义的变量*******************************/
  10. uchar ten=0;
  11. bit led_shan=0;
  12. bit fla=0;
  13. bit S6=0;
  14. uchar cai=0;  // 0 时为按下  ;1时为常规

  15. uint num=0;
  16. uchar i;
  17. uchar jiange=1;
  18. uchar wendu;
  19. uchar save[10];
  20. uchar yi,er,san,si,wu,liu,qi,ba;
  21. /*************************定义的变量****************************/

  22. /******************函数声明********************/
  23. void init();
  24. void keyscan();
  25. void Timer0Init();
  26. void delayms(int ms);
  27. void display1(uchar yi,uchar er);
  28. void display2(uchar san,uchar si);
  29. void display3(uchar wu,uchar liu);
  30. void display4(uchar qi,uchar ba);
  31. /******************函数声明********************/
  32. void main()
  33. {
  34.         init();
  35.         ds1302_init();
  36.         Timer0Init();
  37.         yi=11;er=11;san=11;si=11;wu=11;liu=10;qi=0;ba=1;
  38.         while(1)
  39.         {
  40.                 if(cai==0)   //******** 常 态 ***********
  41.                 {
  42.                         yi=11;er=11;san=11;si=11;wu=11;liu=10;
  43.                         qi=jiange/10;ba=jiange%10;
  44.                 }       
  45.                 else if(cai==1)  //S5  被按下  ,采集温度
  46.                 {
  47.                         ds1302_get();  //显示时钟;
  48.                         yi=shijian[2]/10;er=shijian[2]%10;san=10;
  49.                         si=shijian[1]/10;wu=shijian[1]%10;liu=10;
  50.                         qi=shijian[0]/10;ba=shijian[0]%10;
  51.                        
  52.                                 if(shijian[0]%2==0)  //提示符闪烁
  53.                                 {
  54.                                         san=10;liu=10;
  55.                                 }
  56.                                 else
  57.                                 {
  58.                                         san=11;liu=11;
  59.                                 }                               
  60.                 }

  61.                 wendu=ds18b20_get();
  62.                 keyscan();
  63.                 display1(yi,er);
  64.                 display2(san,si);
  65.                 display3(wu,liu);
  66.                 display4(qi,ba);
  67.         }
  68. }
  69. void init()
  70. {
  71.         P2=0XA0;
  72.         P0=0X00;
  73.        
  74.         P2=0X80;  
  75.         P0=0XFF;
  76.        
  77.         P2=0XC0;  
  78.         P0=0XFF;               
  79.         P2=0XFF;                  
  80.         P0=0XFF;                  
  81. }
  82. void delayms(int ms)  
  83. {
  84.         int i,j;
  85.         for(i=ms;i>0;i--)
  86.                 for(j=845;j>0;j--);  
  87. }

  88. void Timer0Init(void)                //5毫秒@11.0592MHz
  89. {
  90.         AUXR |= 0x80;                //定时器时钟1T模式
  91.         TMOD &= 0xF0;                //设置定时器模式
  92.         TL0 = 0x00;                //设置定时初值
  93.         TH0 = 0x28;                //设置定时初值
  94.         TF0 = 0;                //清除TF0标志
  95.         TR0 = 1;                //定时器0开始计时
  96.         ET0=1;EA=1;
  97. }
  98. void timer0() interrupt 1  //定时器0中断
  99. {
  100.         num        ++;
  101.         if(cai==1)  //采集温度开始
  102.         {
  103.                 if(num==jiange*200)  //控制采集间隔
  104.                 {
  105.                         num=0;
  106.                   save[ten]=wendu;   //保存 温度值
  107.                         ten++;
  108.                         if(ten==10)        //10个温度读完  令cai=2  led闪开始  num此时为0
  109.                         {                  //显示 温度值  save[0]
  110.                                 cai=2;led_shan=1;ten=0;
  111.                                 yi=10;er=0;san=0;si=11;wu=11;liu=10;qi=save[0]/10;ba=save[0]%10;
  112.                         }
  113.                 }
  114.         }
  115.         if((cai==2)&&(num==200))  //led灯闪烁;
  116.         {
  117.                 num=0;                  //赋0
  118.                 if(led_shan==1)              
  119.                 {
  120.                         if(fla==0)
  121.                                 {fla=1;P2=0X80;P0=0XFE;}
  122.                         else if(fla==1)
  123.                                 {fla=0;P2=0X80;P0=0XFF;}
  124.                 }
  125.                 else if(led_shan==0)    //led 不闪时    依次显示十个温度值
  126.                 {
  127.                         yi=10;er=ten/10;san=ten%10;si=11;wu=11;liu=10;qi=save[ten]/10;ba=save[ten]%10;
  128.                         ten++;
  129.                         if(ten==10)  //显示完成后归0  以便S7按下
  130.                         {
  131.                                 ten=0;
  132.                                 cai=3;
  133.                         }
  134.                 }
  135.         }
  136. }
  137. void keyscan() //独立按键
  138. {
  139.         if(P30==0)  //S7
  140.         {
  141.                 delayms(5);
  142.                 if(P30==0)  
  143.                 {
  144.                         if(cai==3)  //返回初值
  145.                          cai=0;
  146.                 }
  147.                 while(!P30);
  148.         }
  149.         else if(P31==0) //S6
  150.         {
  151.                 delayms(5);
  152.                 if(P31==0)
  153.                 {
  154.                         if(cai==2)
  155.                         {
  156.                           led_shan=0;    //关led
  157.                                 P2=0X80;
  158.                                 P0=0XFF;
  159.                         }
  160.                 }
  161.                 while(!P31);
  162.         }
  163.         else if(P32==0)//S5
  164.         {
  165.                 delayms(5);
  166.                 if(P32==0)
  167.                 {
  168.                         if(cai==0)
  169.                         {
  170.                         cai=1;num=0;
  171.                         }
  172.                 }
  173.                 while(!P32);
  174.         }
  175.         else if(P33==0) //S4
  176.         {
  177.                 delayms(5);
  178.                 if(P33==0)
  179.                 {       
  180.                         if(cai==0)
  181.                         {
  182.                                 if(jiange==1)
  183.                                         jiange=5;
  184.                                 else if(jiange==5)
  185.                                         jiange=30;
  186.                                 else if(jiange==30)
  187.                                         jiange=60;
  188.                                 else if(jiange==60)
  189.                                         jiange=1;
  190.                   }
  191.                 }
  192.                 while(!P33);
  193.         }
  194. }

  195. void display1(uchar yi,uchar er)
  196. {
  197.         P2=0XC0;
  198.         P0=0X01;
  199.         P2=0XFF;
  200.         P0=tab[yi];
  201.         delayms(1);
  202.        
  203.         P2=0XC0;
  204.         P0=0X02;
  205.         P2=0XFF;
  206.         P0=tab[er];
  207.         delayms(1);
  208. }
  209. void display2(uchar san,uchar si)
  210. {
  211.         P2=0XC0;
  212.         P0=0X04;
  213.         P2=0XFF;
  214.         P0=tab[san];
  215.         delayms(1);
  216.        
  217.         P2=0XC0;
  218.         P0=0X08;
  219.         P2=0XFF;
  220.         P0=tab[si];
  221.         delayms(1);
  222. }
  223. void display3(uchar wu,uchar liu)
  224. {
  225.         P2=0XC0;
  226.         P0=0X10;
  227.         P2=0XFF;
  228.         P0=tab[wu];
  229.         delayms(1);
  230.        
  231.         P2=0XC0;
  232.         P0=0X20;
  233.         P2=0XFF;
  234.         P0=tab[liu];
  235.         delayms(1);
  236. }
  237. void display4(uchar qi,uchar ba)
  238. ……………………

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

所有资料51hei提供下载:
2015.rar (41.98 KB, 下载次数: 11)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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