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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制LCD1602顯示電壓和角度值的代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:391664 發表于 2018-8-30 16:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD1602

單片機源程序如下:
  1. #include "include.h"

  2. //LCD1602

  3. /********IO引腳定義***********************************************************/
  4. sbit LCD_RS=P1^0;//定義引腳
  5. sbit LCD_RW=P1^1;
  6. sbit LCD_E=P1^2;

  7. /********宏定義***********************************************************/
  8. #define LCD_Data P0
  9. #define Busy    0x80 //用于檢測LCD狀態字中的Busy標識

  10. /********數據定義*************************************************************/
  11. //unsigned char code uctech[] = {"MCU218"};

  12. /***********主函數開始********************************************************/       
  13. /*
  14. void main(void)
  15. {
  16.         Delay400Ms();         //啟動等待,等LCD講入工作狀態
  17.         LCDInit();                 //初始化
  18.         Delay5Ms();         //延時片刻(可不要)

  19.         DisplayListChar(0, 0, uctech);
  20.         DisplayOneChar(4, 1, 'a');
  21.         ReadDataLCD();        //測試用句無意義
  22.         while(1);
  23. }
  24. */

  25. /***********寫數據********************************************************/       
  26. void WriteDataLCD(unsigned char WDLCD)
  27. {
  28.         ReadStatusLCD(); //檢測忙
  29.         LCD_Data = WDLCD;
  30.         LCD_RS = 1;
  31.         LCD_RW = 0;
  32.         LCD_E = 0;                 //若晶振速度太高可以在這后加小的延時
  33.         LCD_E = 0;                 //延時
  34.         LCD_E = 1;
  35. }

  36. /***********寫指令********************************************************/       
  37. void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時忽略忙檢測
  38. {
  39.         if (BuysC) ReadStatusLCD(); //根據需要檢測忙
  40.         LCD_Data = WCLCD;
  41.         LCD_RS = 0;
  42.         LCD_RW = 0;
  43.         LCD_E = 0;
  44.         LCD_E = 0;
  45.         LCD_E = 1;
  46. }

  47. /***********讀數據********************************************************/       
  48. unsigned char ReadDataLCD(void)
  49. {
  50.         LCD_RS = 1;
  51.         LCD_RW = 1;
  52.         LCD_E = 0;
  53.         LCD_E = 0;
  54.         LCD_E = 1;
  55.         return(LCD_Data);
  56. }

  57. /***********讀狀態*******************************************************/       
  58. unsigned char ReadStatusLCD(void)
  59. {
  60.         LCD_Data = 0xFF;
  61.         LCD_RS = 0;
  62.         LCD_RW = 1;
  63.         LCD_E = 0;
  64.         LCD_E = 0;
  65.         LCD_E = 1;
  66.         while (LCD_Data & Busy); //檢測忙信號
  67.         return(LCD_Data);
  68. }

  69. /***********初始化********************************************************/       
  70. void LCDInit(void)
  71. {
  72.         LCD_Data = 0;
  73.         WriteCommandLCD(0x38,0);         //三次模式設置,不檢測忙信號
  74.         Delay5Ms();
  75.         WriteCommandLCD(0x38,0);
  76.         Delay5Ms();
  77.         WriteCommandLCD(0x38,0);
  78.         Delay5Ms();

  79.         WriteCommandLCD(0x38,1);         //顯示模式設置,開始要求每次檢測忙信號
  80.         WriteCommandLCD(0x08,1);         //關閉顯示
  81.         WriteCommandLCD(0x01,1);         //顯示清屏
  82.         WriteCommandLCD(0x06,1);         //顯示光標移動設置
  83.         WriteCommandLCD(0x0C,1);         //顯示開及光標設置
  84. }

  85. /***********按指定位置顯示一個字符*******************************************/       
  86. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  87. {
  88.         Y &= 0x1;
  89.         X &= 0xF;                                 //限制X不能大于15,Y不能大于1
  90.         if (Y) X |= 0x40;                 //當要顯示第二行時地址碼+0x40;
  91.         X |= 0x80;                         //算出指令碼
  92.         WriteCommandLCD(X, 0); //這里不檢測忙信號,發送地址碼
  93.         WriteDataLCD(DData);
  94. }

  95. /***********按指定位置顯示一串字符*****************************************/       
  96. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  97. {
  98.         unsigned char ListLength;

  99.         ListLength = 0;
  100.         Y &= 0x1;
  101.         X &= 0xF;                                 //限制X不能大于15,Y不能大于1
  102.         while (DData[ListLength]>=0x20){ //若到達字串尾則退出
  103.                    if (X <= 0xF){                 //X坐標應小于0xF
  104.                      DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
  105.                      ListLength++;
  106.                      X++;
  107.             }
  108.           }
  109. }

  110. /***********短延時********************************************************/       
  111. void Delay5Ms(void)
  112. {
  113.         unsigned int TempCyc = 5552;
  114.         while(TempCyc--);
  115. }

  116. /***********長延時********************************************************/       
  117. void Delay400Ms(void)
  118. {
  119.         unsigned char TempCycA = 5;
  120.         unsigned int TempCycB;
  121.         while(TempCycA--)
  122.         {
  123.                   TempCycB=7269;
  124.                   while(TempCycB--);
  125.         }
  126. }

  127. //顯示AD轉換值
  128. void display_AD_value(unsigned int result)
  129. {

  130.         int i=0;
  131.         unsigned int temp=0;
  132.         unsigned char str[3];
  133.         unsigned int j=100;
  134.         unsigned char k=0;

  135.         DisplayOneChar(0, 0, 'U');        //顯示單個字符
  136.         DisplayOneChar(1, 0, '=');        //顯示單個字
  137.         DisplayOneChar(6, 0, 'V');        //顯示單個字符
  138.        
  139.        
  140.         for(i=0; i<=2; i++)
  141.         {
  142.                 temp=result/j;
  143.                 result=result-j*temp;
  144.                 str[i]=(unsigned char)(temp+0x30);
  145.                 j/=10;
  146.         }
  147.         for(k=0,i=0; i<4; k++,i++)
  148.         {
  149.                 if(i==0)       
  150.                         DisplayOneChar(k+2, 0, str[i]);        //顯示單個字符
  151.                 else if(i==1)       
  152.                         DisplayOneChar(k+2, 0, '.');        //顯示單個字符
  153.                 else
  154.                 {
  155.                         DisplayOneChar(k+2, 0, str[i-1]);        //顯示單個字符       
  156.                 }
  157.                
  158.         }

  159. }

  160. //顯示電機轉動角度
  161. void display_motor_rotaition(unsigned int result)
  162. {

  163.         int i=0;
  164.         unsigned int temp=0;
  165.         unsigned char str[4];
  166.         unsigned int j=1000;
  167.         unsigned char k=0;
  168.        
  169.         DisplayOneChar(0, 1, 'A');        //顯示單個字符
  170.         DisplayOneChar(1, 1, 'n');        //顯示單個字
  171.         DisplayOneChar(2, 1, 'g');        //顯示單個字符
  172.         DisplayOneChar(3, 1, '=');        //顯示單個字符
  173.         DisplayOneChar(9, 1, 'd');        //顯示單個字符
  174.         DisplayOneChar(10, 1, 'u');        //顯示單個字符
  175.         for(i=0; i<=3; i++)
  176.         {
  177.                 temp=result/j;
  178.                 result=result-j*temp;
  179.                 str[i]=(unsigned char)(temp+0x30);
  180.                 j/=10;
  181.         }
  182.         for(k=0,i=0; i<5; k++,i++)
  183.         {
  184.                 if(i==4)       
  185.                         DisplayOneChar(k+4, 1, str[i-1]);        //顯示單個字符
  186.                 else if(i==3)       
  187.                         DisplayOneChar(k+4, 1, '.');        //顯示單個字符
  188.                 else
  189.                 {
  190.                         DisplayOneChar(k+4, 1, str[i]);        //顯示單個字符       
  191.                 }
  192.                
  193.         }

  194. }

復制代碼

所有資料51hei提供下載:
LCD1602.rar (8.88 KB, 下載次數: 13)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-8-30 17:04 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码久久久久久一区二区 | 我我色综合 | 有码一区 | 在线播放一区二区三区 | 一区二区中文 | 日本涩涩网 | 黄色片网此 | 午夜日韩视频 | 一区二区三区四区电影视频在线观看 | 中文字幕中文字幕 | 激情a | 国产成人精品在线 | 亚洲电影一区二区三区 | 久久久www| 色免费在线视频 | 欧美日韩国产不卡 | 日韩在线观看中文字幕 | 成人在线免费观看视频 | 极品销魂美女一区二区 | 91精品国产乱码久久久久久久久 | 中文一区二区 | 日韩精品极品视频在线观看免费 | 日韩在线观看 | 操视频网站 | 九色在线视频 | 亚洲瑟瑟 | 国产美女在线观看 | 国产不卡视频在线 | 欧美视频精品 | 日韩av网址在线观看 | 国产一区二区三区 | av中文字幕在线 | 91久久精品国产91久久性色tv | 久久久黑人 | 一级做受毛片免费大片 | 亚洲欧美另类在线观看 | 91视频免费 | 亚洲精品视频一区二区三区 | 亚洲精品在线观看视频 | 国产精品波多野结衣 | 日屁视频|