找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1861|回复: 0
收起左侧

基于蓝桥杯赛事的模板做的温度传感器程序

[复制链接]
ID:425442 发表于 2018-11-13 09:02 | 显示全部楼层 |阅读模式
这是一个基于蓝桥杯赛事的模板做的温度传感器,因为蓝桥杯的赛事性,以及网上的过多资源是需要大量资源去购买的,在这里,我也想记录自己学习的过程,和大家一起探讨在蓝桥杯学习过后的收获。因为弄了半天不知道怎么上传附件,所以程序就直接粘贴复制了。
  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>

  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. sbit key=P1^4;

  6. u8 code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
  7. u16 yi,er,san,si,wu,liu,qi,ba,jiu;

  8. void Delay100us()               
  9. {
  10.         unsigned char i, j;
  11.         _nop_();
  12.         _nop_();
  13.         i = 2;
  14.         j = 15;
  15.         do
  16.         {
  17.                 while (--j);
  18.         } while (--i);
  19. }

  20. void Delay500us()               
  21. {
  22.         unsigned char i, j;

  23.         _nop_();
  24.         _nop_();
  25.         i = 6;
  26.         j = 93;
  27.         do
  28.         {
  29.                 while (--j);
  30.         } while (--i);
  31. }

  32. void delayms(int ms)
  33. {
  34.         int i,j;
  35.         for(i=ms;i>0;i--)
  36.                 for(j=845;j>0;j--);
  37. }

  38. void chushihua()
  39. {
  40.         key=0;
  41.         Delay500us();
  42.         key=1;
  43.         Delay500us();
  44. }

  45. void write(u8 dat)
  46. {
  47.         u16 i;
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 key=0;
  51.                 key=dat&0x01;
  52.                 Delay100us();
  53.     key=1;
  54.     dat=dat>>1;               
  55.         }
  56. }

  57. u16 read()
  58. {
  59.         u16  i;
  60.         u16 dat;
  61.         for (i=0;i<8;i++)
  62.         {
  63.                 key=0;
  64.                         _nop_();
  65.                 dat=dat>>1;
  66.                 key=1;
  67.                 if(key==1)
  68.                 {
  69.                                 dat=dat|0x80;
  70.                         }
  71.                
  72.                         Delay100us();
  73.         }
  74.         return dat;
  75. }

  76. u16 tempget()
  77. {
  78.         u16 temp;
  79.         u16 low,height;
  80.         
  81.         chushihua();
  82.         write(0xcc);
  83.         write(0x44);
  84.         Delay500us();
  85.         Delay500us();/*yidian*/
  86.         
  87.         chushihua();
  88.         write(0xcc);
  89.         write(0xbe);
  90.         
  91.         low=read();
  92.         height=read();
  93.         
  94.         temp=height<<4;
  95.         temp=temp|(low>>4);
  96.         
  97.         return temp;
  98. }

  99. void allinit()
  100. {
  101.         P2=0XA0;
  102.         P0=0X00;
  103.         
  104.         P2=0X80;
  105.         P0=0XFF;
  106.         
  107.         P2=0XC0;
  108.         P0=0XFF;
  109.         P2=0XFF;
  110.         P0=0XFF;
  111. }

  112. void desplay1 (u16 yi,u16 er)
  113. {
  114.                         P2=0XC0;
  115.                 P0=0X01;
  116.                 P2=0XFF;                  
  117.                 P0=tab[yi];
  118.                 delayms(1);
  119.                
  120.                 P2=0XC0;
  121.                 P0=0X02;
  122.                 P2=0XFF;
  123.                 P0=tab[er];
  124.                 delayms(1);
  125. }

  126. void desplay2 (u16 san,u16 si)
  127. {
  128.                         P2=0XC0;
  129.                 P0=0X04;
  130.                 P2=0XFF;                  
  131.                 P0=tab[san];
  132.                 delayms(1);
  133.                
  134.                 P2=0XC0;
  135.                 P0=0X08;
  136.                 P2=0XFF;
  137.                 P0=tab[si];
  138.                 delayms(1);
  139. }

  140. void desplay3 (u16 wu,u16 liu)
  141. {
  142.                         P2=0XC0;
  143.                 P0=0X10;
  144.                 P2=0XFF;                  
  145.                 P0=tab[wu];
  146.                 delayms(1);
  147.                
  148.                 P2=0XC0;
  149.                 P0=0X20;
  150.                 P2=0XFF;
  151.                 P0=tab[liu];
  152.                 delayms(1);
  153. }

  154. void desplay4 (u16 qi,u16 ba)
  155. {
  156.                         P2=0XC0;
  157.                 P0=0X40;
  158.                 P2=0XFF;                  
  159.                 P0=tab[qi];
  160.                 delayms(1);
  161.                
  162.                 P2=0XC0;
  163.                 P0=0X80;
  164.                 P2=0XFF;
  165.                 P0=tab[ba];
  166.                 delayms(1);
  167. }

  168. void main()
  169. {
  170.         u16 wendu;
  171.         allinit();
  172.                  yi=11;
  173.                 er=11;
  174.                 san=11;
  175.           si=11;
  176.           wu=11;
  177.           liu=0;
  178.           qi=0;
  179.           ba=0;
  180.         while(1)
  181.         {
  182.                 wendu=tempget();
  183.                
  184.    liu=wendu/100;
  185.                 qi=wendu%100/10;
  186.                 ba=wendu%10;
  187.                
  188.                 desplay1(yi,er);
  189.                 desplay2(san,si);
  190.                 desplay3(wu,liu);
  191.                 desplay4(qi,ba);
  192.         }
  193.         
  194. }
复制代码

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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