找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2303|回復(fù): 0
收起左側(cè)

藍(lán)橋杯單片機(jī)大賽第三屆自動售水機(jī)程序及賽題

[復(fù)制鏈接]
ID:609573 發(fā)表于 2020-8-7 22:05 | 顯示全部樓層 |閱讀模式
自己寫的代碼 打算分享出來 雖然不是最精簡算法,但是能基本實現(xiàn)賽題要求的功能,僅供參考。和大家一起交流
  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;  /* 數(shù)據(jù)線 */
  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. //等待應(yīng)答
  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總線發(fā)送數(shù)據(jù)
  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總線上接收數(shù)據(jù)
  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. }
復(fù)制代碼

代碼只展示部分

3屆自動售水機(jī).zip

33.93 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5

3:2012藍(lán)橋杯單片機(jī)第三屆初賽試題(第四屆模擬題)-自動售水機(jī).pdf

908.98 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表