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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1441|回復: 1
打印 上一主題 下一主題
收起左側

我的單片機病床呼叫設計源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:706535 發表于 2020-3-11 21:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #include<math.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit rs=P3^4;
  6. sbit rw=P3^5;
  7. sbit e=P3^6;
  8. sbit xiangying=P3^3;
  9. sbit beep=P3^7;


  10. uchar deng=0;                 //表示有哪幾個按下,也用來顯示燈
  11. uchar lcd[10]={0};    //用來按下標記順序
  12. uchar i=0;

  13. /********************************************************************
  14. * 名稱 : delay_uint()
  15. * 功能 : 小延時。
  16. * 輸入 : 無
  17. * 輸出 : 無
  18. ***********************************************************************/
  19. void delay_uint(uint q)
  20. {
  21.         while(q--);
  22. }

  23. /********************************************************************
  24. * 名稱 : write_com(uchar com)
  25. * 功能 : 1602命令函數
  26. * 輸入 : 輸入的命令值
  27. * 輸出 : 無
  28. ***********************************************************************/
  29. void write_com(uchar com)
  30. {
  31.         e=0;
  32.         rs=0;
  33.         rw=0;
  34.         P0=com;
  35.         delay_uint(25);
  36.         e=1;
  37.         delay_uint(100);
  38.         e=0;
  39. }

  40. /********************************************************************
  41. * 名稱 : write_data(uchar dat)
  42. * 功能 : 1602寫數據函數
  43. * 輸入 : 需要寫入1602的數據
  44. * 輸出 : 無
  45. ***********************************************************************/
  46. void write_data(uchar dat)
  47. {
  48.         e=0;
  49.         rs=1;
  50.         rw=0;
  51.         P0=dat;
  52.         delay_uint(25);
  53.         e=1;
  54.         delay_uint(100);
  55.         e=0;        
  56. }

  57. /********************************************************************
  58. * 名稱 : write_string(uchar hang,uchar add,uchar *p)
  59. * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
  60.                   write_string(1,5,"ab cd ef");
  61. * 輸入 : 行,列,需要輸入1602的數據
  62. * 輸出 : 無
  63. ***********************************************************************/
  64. void write_string(uchar hang,uchar add,uchar *p)
  65. {
  66.         if(hang==1)   
  67.                 write_com(0x80+add);
  68.         else
  69.                 write_com(0x80+0x40+add);
  70.         while(1)
  71.         {
  72.                 if(*p == '\0')  break;
  73.                 write_data(*p);
  74.                 p++;
  75.         }        
  76. }


  77. /***********************lcd1602上顯示兩位十進制數************************/
  78. void write_onenumber(uchar hang,uchar add,uint date)
  79. {
  80.         if(hang==1)   
  81.                 write_com(0x80+add);
  82.         else
  83.                 write_com(0x80+0x40+add);
  84.         write_data(0x30+date);        
  85. }

  86. /***********************lcd1602初始化設置************************/
  87. void init_1602()
  88. {
  89.         write_com(0x38);        
  90.         write_com(0x0c);
  91.         write_com(0x06);
  92.         write_string(1,0,"Bingfang  Hujiao");

  93.         delay_uint(1000);
  94. }


  95. void delay1ms(int c)   // 范圍0~65535        消抖
  96. {
  97.   unsigned char a,b;
  98.   for(;c>0;c--)
  99.   {
  100.     for(b=199;b>0;b--)
  101.         for(a=1;a>0;a--);
  102.   }
  103. }

  104. void get()   //獲取數字的函數
  105. {
  106. switch (~P2)
  107. {
  108.      case 0x01:  lcd[i]=1;  break;
  109.          case 0x02:  lcd[i]=2;  break;
  110.          case 0x04:  lcd[i]=3;  break;
  111.          case 0x08:  lcd[i]=4;  break;
  112.          case 0x10:  lcd[i]=5;  break;
  113.          case 0x20:  lcd[i]=6;  break;
  114.          case 0x40:  lcd[i]=7;  break;
  115.          case 0x80:  lcd[i]=8;  break;
  116. }
  117. }


  118. void scanning(void)         //按鍵掃描
  119. {
  120.    uchar j=0;
  121.    if(P2!=0xff)  //判斷是P3端有按鍵按下
  122.    {
  123.                 if(deng!=(deng|(~P2)))  //判斷是否已經按過的按鍵,是繼續
  124.                 {
  125.                         get();   //獲取數字,并存進數組
  126.                         i++;        
  127.                         deng=deng|(~P2);   //得到按鍵的位數,并讓燈亮
  128.                         P1=deng;
  129.                         delay1ms(6);   //消抖
  130.                 }
  131.    }

  132.    if(xiangying==0)          //消除部分
  133.    {  
  134.     deng=deng&(~(1<<(lcd[0]-1)));   //讓首位的燈滅
  135.     P1=deng;                 
  136.                         for(j=0;j<i+1;j++)   //多一位把右邊的數清零
  137.                 {
  138.                  lcd[j]=lcd[j+1];
  139.                 }
  140.           i--;
  141.           delay1ms(6);   //消抖
  142.                  while(xiangying==0);   //等待按鍵抬起,未按鍵消抖,可能出現多次清除
  143.    }


  144.    for(j=0;j<i;j++)           //LCD顯示
  145.    {
  146.            write_onenumber(0,2*j,lcd[j]);                //顯示
  147.    }
  148.          for(j=i;j<8;j++)           //LCD顯示,其他為填空白
  149.    {
  150.     write_string(0,2*j," ");   
  151.    }


  152.    if(deng!=0x00)        //蜂鳴器
  153.     beep=0;
  154.    else
  155.      beep=1;

  156. }



  157. void main()
  158. {
  159. beep=1;
  160. P1=0x00;
  161. init_1602();
  162.   while(1)
  163.   {
  164.      scanning();
  165.   }
  166. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2020-3-12 12:38 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产 欧美 日韩 一区 | 欧美日韩精品一区二区天天拍 | 久久亚洲视频 | 精品国产一区二区三区久久久四川 | 久久久久久免费看 | 91精品久久久久久久久久 | 中文字幕在线第一页 | 91久久精品国产91久久 | 在线欧美一区 | 国产精品久久国产精品99 gif | 伊人精品 | 日韩欧美国产一区二区 | 日日干日日 | 免费黄色大片 | 国产精品色婷婷久久58 | 韩日精品一区 | 91麻豆精品一区二区三区 | 日韩成人影院在线观看 | 野狼在线社区2017入口 | 久久精品一级 | 开操网| 激情 婷婷 | 午夜免费视频 | 亚洲精品一区二区网址 | av香港经典三级级 在线 | 国产九一精品 | 黄a免费看 | av影音资源| 国产精品美女 | 亚洲一区国产 | 成年人黄色一级片 | 精品一区二区观看 | 真人毛片 | 伊人网综合在线观看 | 香蕉久久av| a级在线 | 国产精品久久一区二区三区 | 日韩中文字幕 | 国产精品视频免费观看 | 亚洲一区二区三区免费在线观看 | 成人av电影天堂 |