久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2090|回復: 0
收起左側

自動售水機代碼

[復制鏈接]
ID:785561 發表于 2020-10-8 19:22 | 顯示全部樓層 |閱讀模式
main.c
  1. #include <STC15F2K60S2.h>
  2. #include "intrins.h"
  3. #include "iic.h"

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define Y4 P2=(P2&0x1f)|0x80;
  7. #define Y5 P2=(P2&0x1f)|0xa0;
  8. #define Y6 P2=(P2&0x1f)|0xc0;
  9. #define Y7 P2=(P2&0x1f)|0xe0;

  10. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  11. uchar yi,er,san,si,wu,liu,qi,ba;
  12. uchar num;unsigned long int ml; uchar s;unsigned long int die;uchar g;


  13. void allinit(void);
  14. void Timer0Init(void);
  15. void display1(uchar yi,uchar er);
  16. void display2(uchar san,uchar si);
  17. void display3(uchar wu,uchar liu);
  18. void display4(uchar qi,uchar ba);
  19. void keyscan();
  20. void keyscan16();

  21. void delayms(int ms)        //延時函數
  22. {
  23.   int i,j;
  24.   for(i=ms;i>0;i--)
  25.     for(j=845;j>0;j--);
  26. }
  27. void main()
  28. {
  29.   allinit();
  30.   Timer0Init();
  31.   while(1)
  32.   {
  33.      keyscan();          //獨立按鍵
  34. //         keyscan16();          //矩陣按鍵
  35.      display1(10,0);
  36.          display2(5,0);         
  37.          display3(wu,liu);
  38.          display4(qi,ba);
  39.            if(ml == 99990)
  40.            {
  41.            Y5;P0=0x00;
  42.            ET0=0;EA=0;
  43.            die=ml*5;
  44.            wu=die/100000;
  45.            liu=die%100000/10000;
  46.            qi=die%10000/1000;
  47.            ba=die%1000/100;
  48.            }
  49.          g=pcf8591(1);
  50.          if(g<64)
  51.          {Y4;P0=0xfe;}
  52.          if(g>=64)
  53.          {Y4;P0=0xff;}
  54.   }
  55. }
  56. void allinit(void)
  57. {
  58.   Y5;P0=0x00; //關閉蜂鳴器和繼電器
  59.   Y6;P0=0xff; //打開數碼管位選
  60.   Y7;P0=0xff; //關閉數碼管段選
  61.   Y4;P0=0xff; //關閉led燈
  62. }
  63. void display1(uchar yi,uchar er) //數碼管顯示
  64. {
  65.    Y6;P0=0x01;Y7;P0=tab[yi];delayms(1);
  66.    Y6;P0=0x02;Y7;P0=tab[er]&0x7f;delayms(1);
  67. }
  68. void display2(uchar san,uchar si)
  69. {
  70.    Y6;P0=0x04;Y7;P0=tab[san];delayms(1);
  71.    Y6;P0=0x08;Y7;P0=tab[si];delayms(1);
  72. }
  73. void display3(uchar wu,uchar liu)
  74. {
  75.    Y6;P0=0x10;Y7;P0=tab[wu];delayms(1);
  76.    Y6;P0=0x20;Y7;P0=tab[liu]&0x7f;delayms(1);
  77. }
  78. void display4(uchar qi,uchar ba)
  79. {
  80.    Y6;P0=0x40;Y7;P0=tab[qi];delayms(1);
  81.    Y6;P0=0x80;Y7;P0=tab[ba];delayms(1);
  82. }
  83. void keyscan(void) //獨立按鍵處理
  84. {
  85.   if(P30==0)
  86.   {
  87.     delayms(5);
  88.         if(P30==0)
  89.         {
  90.          wu=0;liu=0;qi=0;ba=0;
  91.          ET0=1;EA=1;
  92.          Y5;P0=0x10;
  93.         }while(!P30);
  94.   }
  95.   else if(P31==0)
  96.   {
  97.     delayms(5);
  98.         if(P31==0)
  99.         {
  100.            die=ml*5;
  101.            wu=die/100000;
  102.            liu=die%100000/10000;
  103.            qi=die%10000/1000;
  104.            ba=die%1000/100;
  105.            ET0=0;EA=0;
  106.            Y5;P0=0x00;
  107.            ml=0;
  108.         }while(!P31);
  109.   }
  110.   else if(P32==0)
  111.   {
  112.     delayms(5);
  113.         if(P32==0)
  114.         {
  115.            san=5;
  116.         }while(!P32);
  117.   }
  118.   else if(P33==0)
  119.   {
  120.     delayms(5);
  121.         if(P33==0)
  122.         {
  123.            si=6;
  124.         }while(!P33);
  125.   }
  126. }
  127. void keyscan16() //矩陣按鍵
  128. {
  129.     uchar temp;
  130.        
  131.         P44=0;P42=1;P3=0X7F;
  132.         temp=P3;
  133.         temp=temp&0X0F;
  134.         if(temp!=0x0f)
  135.         {
  136.                 delayms(5);
  137.                 temp=P3;
  138.                 temp=temp&0X0F;
  139.                 if(temp!=0x0f)
  140.                 {
  141.                         temp=P3;
  142.                         switch(temp)
  143.                         {
  144.                                 case 0x7e: num=0;break;
  145.                                 case 0x7d: num=4;break;
  146.                                 case 0x7b: num=8;break;
  147.                                 case 0x77: num=12;break;       
  148.                         }
  149.                         while(temp!=0x0f)
  150.                         {
  151.                                 temp=P3;
  152.                                 temp=temp&0X0F;
  153.                         }
  154.                 }
  155.         }

  156.         P44=1;P42=0;P3=0XBF;
  157.         temp=P3;
  158.         temp=temp&0X0F;
  159.         if(temp!=0x0f)
  160.         {
  161.                 delayms(5);
  162.                 temp=P3;
  163.                 temp=temp&0X0F;
  164.                 if(temp!=0x0f)
  165.                 {
  166.                         temp=P3;
  167.                         switch(temp)
  168.                         {
  169.                                 case 0xBe: num=1;break;
  170.                                 case 0xBd: num=5;break;
  171.                                 case 0xBb: num=9;break;
  172.                                 case 0xB7: num=13;break;       
  173.                         }
  174.                         while(temp!=0x0f)
  175.                         {
  176.                                 temp=P3;
  177.                                 temp=temp&0X0F;
  178.                         }
  179.                 }
  180.         }
  181.        
  182.         P3=0XDF;P44=1;P42=1;
  183.         temp=P3;
  184.         temp=temp&0X0F;
  185.         if(temp!=0x0f)
  186.         {
  187.                 delayms(5);
  188.                 temp=P3;
  189.                 temp=temp&0X0F;
  190.                 if(temp!=0x0f)
  191.                 {
  192.                         temp=P3;
  193.                         switch(temp)
  194.                         {
  195.                                 case 0xDe: num=2;break;
  196.                                 case 0xDd: num=6;break;
  197.                                 case 0xDb: num=10;break;
  198.                                 case 0xD7: num=14;break;       
  199.                         }
  200.                         while(temp!=0x0f)
  201.                         {
  202.                                 temp=P3;
  203.                                 temp=temp&0X0F;
  204.                         }
  205.                 }
  206.         }
  207.        
  208.         P3=0XEF;P44=1;P42=1;
  209.         temp=P3;
  210.         temp=temp&0X0F;
  211.         if(temp!=0x0f)
  212.         {
  213.                 delayms(5);
  214.                 temp=P3;
  215.                 temp=temp&0X0F;
  216.                 if(temp!=0x0f)
  217.                 {
  218.                         temp=P3;
  219.                         switch(temp)
  220.                         {
  221.                                 case 0xEe: num=3;break;
  222.                                 case 0xEd: num=7;break;
  223.                                 case 0xEb: num=11;break;
  224.                                 case 0xE7: num=15;break;       
  225.                         }
  226.                         while(temp!=0x0f)
  227.                         {
  228.                                 temp=P3;
  229.                                 temp=temp&0X0F;
  230.                         }
  231.                 }
  232.         }
  233. }  
  234. void Timer0Init()                //1毫秒@11.0592MHz
  235. {
  236.         AUXR |= 0x80;                //定時器時鐘1T模式
  237.         TMOD &= 0xF0;                //設置定時器模式
  238.         TL0 = 0xCD;                //設置定時初值
  239.         TH0 = 0xD4;                //設置定時初值
  240.         TF0 = 0;                //清除TF0標志
  241.         TR0 = 1;                //定時器0開始計時
  242. }
  243. void timer0 () interrupt 1
  244. {
  245.   s++;
  246.   if(s == 10)
  247.   {
  248.     s=0;
  249.         ml++;
  250.         wu=ml/10000;liu=ml%10000/1000;
  251.         qi=ml%1000/100;ba=ml%100/10;
  252.   }
  253. }
復制代碼

iic.c
  1. /*
  2.   程序說明: IIC總線驅動程序
  3.   軟件環境: Keil uVision 4.10
  4.   硬件環境: CT107單片機綜合實訓平臺 8051,12MHz
  5.   日    期: 2011-8-9
  6. */

  7. #include "reg52.h"
  8. #include "intrins.h"
  9. #include "iic.h"

  10. #define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}   


  11. #define SlaveAddrW 0xA0
  12. #define SlaveAddrR 0xA1

  13. //總線引腳定義
  14. sbit SDA = P2^1;  /* 數據線 */
  15. sbit SCL = P2^0;  /* 時鐘線 */


  16. //總線啟動條件
  17. void IIC_Start(void)
  18. {
  19.         SDA = 1;
  20.         SCL = 1;
  21.         somenop;
  22.         SDA = 0;
  23.         somenop;
  24.         SCL = 0;       
  25. }

  26. //總線停止條件
  27. void IIC_Stop(void)
  28. {
  29.         SDA = 0;
  30.         SCL = 1;
  31.         somenop;
  32.         SDA = 1;
  33. }

  34. //應答位控制
  35. void IIC_Ack(bit ackbit)
  36. {
  37.         if(ackbit)
  38.         {       
  39.                 SDA = 0;
  40.         }
  41.         else
  42.         {
  43.                 SDA = 1;
  44.         }
  45.         somenop;
  46.         SCL = 1;
  47.         somenop;
  48.         SCL = 0;
  49.         SDA = 1;
  50.         somenop;
  51. }

  52. //等待應答
  53. bit IIC_WaitAck(void)
  54. {
  55.         SDA = 1;
  56.         somenop;
  57.         SCL = 1;
  58.         somenop;
  59.         if(SDA)   
  60.         {   
  61.                 SCL = 0;
  62.                 IIC_Stop();
  63.                 return 0;
  64.         }
  65.         else  
  66.         {
  67.                 SCL = 0;
  68.                 return 1;
  69.         }
  70. }

  71. //通過I2C總線發送數據
  72. void IIC_SendByte(unsigned char byt)
  73. {
  74.         unsigned char i;
  75.         for(i=0;i<8;i++)
  76.         {   
  77.                 if(byt&0x80)
  78.                 {       
  79.                         SDA = 1;
  80.                 }
  81.                 else
  82.                 {
  83.                         SDA = 0;
  84.                 }
  85.                 somenop;
  86.                 SCL = 1;
  87.                 byt <<= 1;
  88.                 somenop;
  89.                 SCL = 0;
  90.         }
  91. }

  92. //從I2C總線上接收數據
  93. unsigned char IIC_RecByte(void)
  94. {
  95.         unsigned char da;
  96.         unsigned char i;
  97.        
  98.         for(i=0;i<8;i++)
  99.         {   
  100.                 SCL = 1;
  101.                 somenop;
  102.                 da <<= 1;
  103.                 if(SDA)
  104.                 da |= 0x01;
  105.                 SCL = 0;
  106.                 somenop;
  107.         }
  108.         return da;
  109. }
  110. uchar pcf8591(uchar add)
  111. {
  112.   uchar dat;
  113.   IIC_Start();
  114.   IIC_SendByte(0x90);
  115.   IIC_WaitAck();
  116.   IIC_SendByte(add);
  117.   IIC_WaitAck();
  118.   IIC_Stop();

  119.   IIC_Start();
  120.   IIC_SendByte(0x91);
  121.   IIC_WaitAck();
  122.   dat=IIC_RecByte();

  123.   IIC_Stop();

  124.   return dat;
  125. }
復制代碼

iic.h
  1. #ifndef _IIC_H
  2. #define _IIC_H

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. //函數聲明
  6. void IIC_Start(void);
  7. void IIC_Stop(void);  
  8. void IIC_Ack(bit ackbit);
  9. void IIC_SendByte(unsigned char byt);
  10. bit IIC_WaitAck(void);  
  11. unsigned char IIC_RecByte(void);
  12. uchar pcf8591(uchar add);

  13. #endif
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线天堂 | 欧美日韩在线一区二区 | 亚洲第一av | 久草网站| 国产97碰免费视频 | 华人黄网站大全 | 精品电影 | 国产精品一区二区三区久久 | 又黑又粗又长的欧美一区 | 欧美激情一区 | 一区二区三区视频在线观看 | 中国美女撒尿txxxxx视频 | 4hu最新网址 | 一区二区三区亚洲精品国 | 精品国产乱码久久久久久闺蜜 | 免费亚洲婷婷 | 欧美一区二区精品 | 免费观看色 | 成人 在线| 中文久久 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 午夜精品在线观看 | 国产一区三区在线 | 亚洲国产精品视频一区 | 97久久精品午夜一区二区 | 国产一区黄色 | 精品videossex高潮汇编 | 欧美中文字幕在线 | 日韩淫片免费看 | 免费在线观看一区二区 | 色婷婷亚洲国产女人的天堂 | www.国产 | 国产午夜精品视频 | 91在线网站| 久久国产精品72免费观看 | 男女视频在线观看免费 | 一区二区三区欧美大片 | h片在线观看免费 | 免费在线视频一区二区 | 日韩国产中文字幕 | 日韩精品a在线观看图片 |