找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝桥杯单片机大赛第三届自动售水机程序及赛题

[复制链接]
ID:609573 发表于 2020-8-7 22:05 | 显示全部楼层 |阅读模式
自己写的代码 打算分享出来 虽然不是最精简算法,但是能基本实现赛题要求的功能,仅供参考。和大家一起交流
  1. #include <stc15f2k60s2.h>
  2. #include <absacc.h>
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. sbit S4=P3^3;
  7. sbit S5=P3^2;
  8. sbit S6=P3^1;
  9. sbit S7=P3^0;
  10. sbit SDA = P2^1;  /* 数据线 */
  11. sbit SCL = P2^0;  /* 时钟线 */
  12. uchar SMG_duanma[12]={0XC0,0XF9,0XA4,0XB0,
  13.                                           0X99,0X92,0X82,0XF8,
  14.                                           0X80,0X90,0XFF,0X7f};
  15. uchar SMG_pianxuan[10]={0x01,0x02,0X02,0x04,0x08,
  16.                                            0x10,0x20,0X20,0x40,0x80};
  17. uchar SMGSL_huanchong[10]={10,0,11,5,0,0,0,11,0,0};
  18. uchar SMGJG_huanchong[10]={10,0,11,5,0,0,0,11,0,0};
  19. int flag,shuiliang,qiehuan,flag1;
  20. void Delay1ms(int time)                //@12.000MHz
  21. {
  22.         uchar i, j;
  23.         while(time--)
  24.         {
  25.                 i = 12;
  26.                 j = 169;
  27.                 do
  28.                 {
  29.                         while (--j);
  30.                 } while (--i);
  31.         }
  32. }
  33. void Delay6us()                //@12.000MHz
  34. {
  35.         unsigned char i;

  36.         _nop_();
  37.         _nop_();
  38.         i = 15;
  39.         while (--i);
  40. }
  41. //总线启动条件
  42. void IIC_Start()
  43. {
  44.     SDA = 1;
  45.     SCL = 1;
  46.     Delay6us();
  47.     SDA = 0;
  48.     Delay6us();
  49.     SCL = 0;       
  50. }

  51. //总线停止条件
  52. void IIC_Stop()
  53. {
  54.     SDA = 0;
  55.     SCL = 1;
  56.     Delay6us();
  57.     SDA = 1;
  58.     Delay6us();
  59. }
  60. //等待应答
  61. bit IIC_WaitAck()
  62. {
  63.     bit ackbit;
  64.        
  65.     SCL  = 1;
  66.     Delay6us();
  67.     ackbit = SDA;
  68.     SCL = 0;
  69.     Delay6us();
  70.     return ackbit;
  71. }

  72. //通过I2C总线发送数据
  73. void IIC_SendByte(uchar byt)
  74. {
  75.     uchar i;

  76.     for(i=0; i<8; i++)
  77.     {
  78.         SCL  = 0;
  79.         Delay6us();
  80.         if(byt & 0x80) SDA  = 1;
  81.         else SDA  = 0;
  82.         Delay6us();
  83.         SCL = 1;
  84.         byt <<= 1;
  85.         Delay6us();
  86.     }
  87.     SCL  = 0;  
  88. }

  89. //从I2C总线上接收数据
  90. uchar IIC_RecByte()
  91. {
  92.     uchar i, da;
  93.     for(i=0; i<8; i++)
  94.     {   
  95.             SCL = 1;
  96.         Delay6us();
  97.         da <<= 1;
  98.         if(SDA) da |= 1;
  99.         SCL = 0;
  100.         Delay6us();
  101.     }
  102.     return da;   
  103. }
  104. long AD_read()
  105. {
  106.         long temp;
  107.         IIC_Start();
  108.         IIC_SendByte(0x90);
  109.         IIC_WaitAck();
  110.         IIC_SendByte(0x01);
  111.         IIC_WaitAck();
  112.         IIC_Stop();
  113.        
  114.         IIC_Start();
  115.         IIC_SendByte(0x91);
  116.         IIC_WaitAck();
  117.         temp=IIC_RecByte();
  118.         IIC_Stop();
  119.         temp=temp*1.9;
  120.         return temp;
  121. }
复制代码

代码只展示部分

3届自动售水机.zip

33.93 KB, 下载次数: 22, 下载积分: 黑币 -5

3:2012蓝桥杯单片机第三届初赛试题(第四届模拟题)-自动售水机.pdf

908.98 KB, 下载次数: 10, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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