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

標題: 單片機液體流量計仿真與源碼 LCD1602顯示 [打印本頁]

作者: qq675715901    時間: 2018-4-24 19:13
標題: 單片機液體流量計仿真與源碼 LCD1602顯示
測水流量的~
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<REG52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar temp_1[]={"00.00M3/H 000.0L"};        //顯示第一行       
  6. uchar temp_2[]={"SI:0.0L         "};        //顯示第2行
  7.                                                                                                                                                                                                                                                                                                          
  8. sbit k1=P2^0;//按鍵定義 分別4個開關
  9. sbit k2=P2^1;
  10. sbit k3=P2^2;

  11. uint liuliang; //變量定義
  12. uint shudu;
  13. uint M1;
  14. uint M2;
  15. uchar TEMP=01;




  16. //Port Definitions**********************************************************
  17. sbit LcdRs                = P1^0;
  18. sbit LcdRw                = P1^1;
  19. sbit LcdEn          = P1^2;
  20. sfr  DBPort         = 0x80;                //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口


  21. void delay(uint z)
  22. {
  23.    uint a,b;
  24.    for(a=z;a>0;a--)
  25.      for(b=120;b>0;b--);
  26. }


  27. //內部等待函數**************************************************************************
  28. unsigned char LCD_Wait(void)
  29. {
  30.         LcdRs=0;
  31.         LcdRw=1;        _nop_();
  32.         LcdEn=1;        _nop_();                                         
  33.         LcdEn=0;
  34.         return DBPort;               
  35. }
  36. //向LCD寫入命令或數據************************************************************
  37. #define LCD_COMMAND                        0      // Command
  38. #define LCD_DATA                        1      // Data
  39. #define LCD_CLEAR_SCREEN        0x01      // 清屏
  40. #define LCD_HOMING                  0x02      // 光標返回原點
  41. void LCD_Write(bit style, unsigned char input)
  42. {
  43.         LcdEn=0;
  44.         LcdRs=style;
  45.         LcdRw=0;                _nop_();
  46.         DBPort=input;        _nop_();//注意順序
  47.         LcdEn=1;                _nop_();//注意順序
  48.         LcdEn=0;                _nop_();
  49.         LCD_Wait();       
  50. }

  51. //設置顯示模式************************************************************
  52. #define LCD_SHOW                        0x04    //顯示開
  53. #define LCD_HIDE                        0x00    //顯示關          

  54. #define LCD_CURSOR                        0x02         //顯示光標
  55. #define LCD_NO_CURSOR                0x00    //無光標                     

  56. #define LCD_FLASH                        0x01    //光標閃動
  57. #define LCD_NO_FLASH                0x00    //光標不閃動

  58. void LCD_SetDisplay(unsigned char DisplayMode)
  59. {
  60.         LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
  61. }

  62. //設置輸入模式************************************************************
  63. #define LCD_AC_UP                        0x02
  64. #define LCD_AC_DOWN                        0x00      // default

  65. #define LCD_MOVE                        0x01      // 畫面可平移
  66. #define LCD_NO_MOVE                        0x00      //default

  67. void LCD_SetInput(unsigned char InputMode)
  68. {
  69.         LCD_Write(LCD_COMMAND, 0x04|InputMode);
  70. }

  71. //初始化LCD************************************************************
  72. void LCD_Initial()
  73. {
  74.         LcdEn=0;
  75.         LCD_Write(LCD_COMMAND,0x38);           //8位數據端口,2行顯示,5*7點陣
  76.         delay(5);
  77.         LCD_Write(LCD_COMMAND,0x38);
  78.         delay(5);
  79.         LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標
  80.         delay(5);
  81.         LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  82.         delay(5);
  83.         LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫面不動
  84.         delay(5);
  85. }

  86. //液晶字符輸入的位置************************
  87. void GotoXY(unsigned char x, unsigned char y)
  88. {
  89.         if(y==0)
  90.                 LCD_Write(LCD_COMMAND,0x80|x);
  91.         if(y==1)
  92.                 LCD_Write(LCD_COMMAND,0x80|(x-0x40));
  93. }

  94. //將字符輸出到液晶顯示
  95. void Print(unsigned char *str)
  96. {
  97.         while(*str!='\0')
  98.         {
  99.                 LCD_Write(LCD_DATA,*str);
  100.                 str++;
  101.                 delay(1);
  102.         }
  103. }


  104. void key()// 按鍵檢測
  105. {

  106.          if(k1==0)//設置預置數加
  107.   {
  108.    delay(5);
  109.    if(k1==0)//清零
  110.    {
  111.                                 M2=0;
  112.                                
  113.    while(k1==0);
  114.    }
  115.   }
  116.                
  117.                
  118.   if(k2==0)//設置預置數加
  119.   {
  120.    delay(5);
  121.    if(k2==0)
  122.    {
  123.    TEMP+=1;
  124.    if(TEMP>=99)
  125.    TEMP=99;
  126.    while(k2==0);
  127.    }
  128.   }
  129.    if(k3==0)//設置預置數減
  130.   {
  131.    delay(5);
  132.    if(k3==0)
  133.    {
  134.    if(TEMP>=1)
  135.    TEMP-=1;
  136.    else
  137.    TEMP=0;
  138.   while(k3==0);
  139.    }
  140.   }
  141.   

  142. }


  143. main()
  144. {

  145. EX0=1;//開外部中斷0
  146. PX0=1;// 外部中斷0高優先級
  147. IT0=1;//觸發模式0= 電平 1=邊沿觸發
  148.         TMOD = 0x11;
  149. ET1=1;
  150.         TR1=1;

  151.         TH1 = (65535-50000)/256;
  152.         TL1 = (65535-50000)%256;
  153.         EA=1;                                                                               

  154. LCD_Initial();    //液晶初始化
  155. while(1)
  156. {
  157.    key();// 按鍵檢測
  158.                        

  159.                         liuliang=M2*TEMP;

  160.    temp_1[0]=shudu/1000+0x30;//轉換成液晶字符下同
  161.    temp_1[1]=shudu/100%10+0x30;
  162.    temp_1[3]=shudu/10%10+0x30;
  163.                  temp_1[4]=shudu%10+0x30;
  164.   
  165.    temp_1[10]=liuliang/1000+0x30;
  166.    temp_1[11]=liuliang/100%10+0x30;
  167.    temp_1[12]=liuliang/10%10+0x30;
  168.    temp_1[14]=liuliang%10+0x30;
  169.                
  170.    temp_2[3]=TEMP/10+0x30;
  171.    temp_2[5]=TEMP%10+0x30;

  172.        
  173.                
  174.    GotoXY(0,0);//顯示起始位置   Y=0,第一行,Y=1 第二行//顯示第一行
  175.    Print(temp_1);// 內容
  176.    GotoXY(0,1);//顯示起始位置   Y=0,第一行,Y=1 第二行//顯示第一行
  177.    Print(temp_2);// 內容

  178. }

  179. }
  180.        


  181. void my_INT0(void) interrupt 0
  182. {
  183.         M1++;
  184.         M2++;
  185. ……………………

  186. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
LCD液體流量計.zip (104.7 KB, 下載次數: 303)



作者: fsss007    時間: 2018-5-30 16:14
這種應用我也想做一個,凈水器出水流量控制器。
作者: xiaoguaishouya    時間: 2018-6-10 16:15
請問SI代表什么,求回復
作者: xiaoguaishouya    時間: 2018-6-10 16:15
請問SI代表什么,求回復
作者: zhzfantasy    時間: 2018-9-9 19:39
多謝了..
作者: 小文文    時間: 2019-2-22 15:41
信號空接了那個呢?能說一下嗎?
作者: ForYou、愛你    時間: 2019-10-26 11:31
你用的流量傳感器是什么型號的
作者: 單片機上的小小    時間: 2021-7-25 11:11
代碼中si代表著什么意思

作者: jack丶    時間: 2023-9-28 10:06

代碼中si代表著什么意思
作者: 夫賴    時間: 2024-2-17 18:44
xiaoguaishouya 發表于 2018-6-10 16:15
請問SI代表什么,求回復

信號完整性

作者: 夫賴    時間: 2024-2-17 18:45
jack丶 發表于 2023-9-28 10:06
代碼中si代表著什么意思

信號完整系性
作者: joyb    時間: 2024-2-18 08:40
shudu=TEMP*M1*12*0.06*100/10;
沒有說明




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久久久久中文字 | 国产成人一区二 | 久久久无码精品亚洲日韩按摩 | 999视频 | 国产精品午夜电影 | 日韩一二区 | 天天色天天射天天干 | 91国内视频在线 | 成人av片在线观看 | 国产成人99久久亚洲综合精品 | 精品av | 久久久久91 | 色www精品视频在线观看 | 拍戏被cao翻了h承欢 | 亚洲视频国产 | 超碰免费在线观看 | 成人精品视频99在线观看免费 | 国产色婷婷久久99精品91 | 黄a在线播放 | 欧美国产日韩一区二区三区 | 一级全黄少妇性色生活免费看 | 人人干人人舔 | 欧美在线观看一区 | 在线看免费 | 国产精品一区二区在线播放 | 久久久久久久综合色一本 | 成人永久免费 | 欧美一区免费 | 久草视| 91免费视频| 一级片网址 | 中文字幕亚洲一区 | a免费在线| 日韩一区二区在线视频 | 亚洲精品久久久久国产 | 日韩和的一区二在线 | 99久久久国产精品免费消防器 | 亚洲成人免费观看 | 四虎精品在线 | 亚洲精品久久久久久一区二区 | 国产精品久久久久无码av |