找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1163|回复: 1
打印 上一主题 下一主题
收起左侧

求一份BS18B20在LM016L上显示的程序

[复制链接]
跳转到指定楼层
楼主
ID:728898 发表于 2020-4-23 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求一份BS18B20在LM016L上显示的程序
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:752156 发表于 2020-6-13 15:38 | 只看该作者
  1. #include "lcd.h"
  2. /*******************************************************************************
  3. * 函 数 名         : Lcd1602_Delay1ms
  4. * 函数功能                   : 延时函数,延时1ms
  5. 该函数是在12MHZ晶振下,12分频单片机的延时。
  6. *******************************************************************************/

  7. //void Lcd1602_Delay1ms(unsigned int c)   //误差 0us
  8. //{
  9. //    unsigned char a,b;
  10. //        for (; c>0; c--)
  11. //        {
  12. //                 for (b=199;b>0;b--)
  13. //                 {
  14. //                          for(a=1;a>0;a--);
  15. //                 }      
  16. //        }
  17. //           
  18. //}

  19. /*  忙等待  */
  20. void LcdWaitReady()
  21. {
  22.         unsigned char sta;
  23.        
  24.         LCD1602_DATAPINS = 0xFF;
  25.         LCD1602_RS = 0;
  26.         LCD1602_RW = 1;
  27.         do{
  28.                 LCD1602_E = 1;
  29.                 sta = LCD1602_DATAPINS;
  30.                 LCD1602_E = 0;
  31.         }while(sta & 0x80);
  32.         // bit7为1,表示液晶正在忙,禁止读写操作,当为0时才可进行读写操作。
  33. }

  34. /*  设置液晶显示位置,RAM起始地址,(x,y)为起始坐标*/
  35. void LcdSetCursor(unsigned char x, unsigned char y)
  36. {
  37.         unsigned char addr;
  38.         if(y == 0)
  39.                 addr = 0x00 + x;
  40.         else
  41.                 addr = 0x40 + x;
  42.         LcdWriteCom(addr|0x80);
  43. }

  44. /*  液晶显示字符串,x,y表示起始坐标,str表示输入内容  */
  45. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  46. {
  47.         LcdSetCursor(x, y);      // 设置起始地址
  48.         while(*str != '\0')
  49.         {
  50.                 LcdWriteData(*str++);
  51.         }
  52. }

  53. /*  液晶显示字符串,x,y表示起始坐标,chr表示输入字符 */
  54. void LcdShowChar(unsigned char x, unsigned char y, unsigned char chr)
  55. {
  56.         LcdSetCursor(x, y);      // 设置起始地址
  57.         LcdWriteData(chr);
  58. }

  59. /*******************************************************************************
  60. * 函 数 名         : LcdWriteCom
  61. * 函数功能                   : 向LCD写入一个字节的命令
  62. *******************************************************************************/
  63. #ifndef         LCD1602_4PINS         //当没有定义这个LCD1602_4PINS时
  64. void LcdWriteCom(unsigned char com)          //写入命令
  65. {
  66.         LcdWaitReady();                  //LCD忙等待
  67.        
  68.         LCD1602_RS = 0;           //选择发送命令
  69.         LCD1602_RW = 0;           //选择写入
  70.        
  71.         LCD1602_DATAPINS = com;     //放入命令

  72.         LCD1602_E = 1;                  //写入时序
  73.         LCD1602_E = 0;
  74. }
  75. #else
  76. void LcdWriteCom(unsigned char com)          //写入命令
  77. {
  78.         LCD1602_E = 0;         //使能清零
  79.         LCD1602_RS = 0;         //选择写入命令
  80.         LCD1602_RW = 0;         //选择写入

  81.         LCD1602_DATAPINS = com;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  82.         Lcd1602_Delay1ms(1);

  83.         LCD1602_E = 1;         //写入时序
  84.         Lcd1602_Delay1ms(5);
  85.         LCD1602_E = 0;

  86. //        Lcd1602_Delay1ms(1);
  87.         LCD1602_DATAPINS = com << 4; //发送低四位
  88.         Lcd1602_Delay1ms(1);

  89.         LCD1602_E = 1;         //写入时序
  90.         Lcd1602_Delay1ms(5);
  91.         LCD1602_E = 0;
  92. }
  93. #endif
  94. /*******************************************************************************
  95. * 函 数 名         : LcdWriteData
  96. * 函数功能                   : 向LCD写入一个字节的数据
  97. * 输    入         : dat
  98. * 输    出         : 无
  99. *******************************************************************************/                  
  100. #ifndef         LCD1602_4PINS                  
  101. void LcdWriteData(unsigned char dat)                        //写入数据
  102. {
  103.         LcdWaitReady();                //LCD忙等待
  104.        
  105.         LCD1602_RS = 1;        //选择输入数据
  106.         LCD1602_RW = 0;        //选择写入

  107.         LCD1602_DATAPINS = dat; //写入数据
  108.         LCD1602_E = 1;                                   //写入时序
  109.         LCD1602_E = 0;
  110. }
  111. #else
  112. void LcdWriteData(unsigned char dat)                        //写入数据
  113. {
  114.         LCD1602_E = 0;          //使能清零
  115.         LCD1602_RS = 1;          //选择写入数据
  116.         LCD1602_RW = 0;          //选择写入

  117.         LCD1602_DATAPINS = dat;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
  118.         Lcd1602_Delay1ms(1);

  119.         LCD1602_E = 1;          //写入时序
  120.         Lcd1602_Delay1ms(5);
  121.         LCD1602_E = 0;

  122.         LCD1602_DATAPINS = dat << 4; //写入低四位
  123.         Lcd1602_Delay1ms(1);

  124.         LCD1602_E = 1;          //写入时序
  125.         Lcd1602_Delay1ms(5);
  126.         LCD1602_E = 0;
  127. }
  128. #endif
  129. /*******************************************************************************
  130. * 函 数 名       : LcdInit()
  131. * 函数功能                 : 初始化LCD屏
  132. *******************************************************************************/                  
  133. #ifndef                LCD1602_4PINS
  134. void LcdInit()                                                  //LCD初始化子程序
  135. {
  136.         LcdWriteCom(0x38);  //开显示
  137.         LcdWriteCom(0x0c);  //开显示不显示光标
  138.         LcdWriteCom(0x06);  //写一个指针加1
  139.         LcdWriteCom(0x01);  //清屏
  140. //        LcdWriteCom(0x80);  //设置数据指针起点
  141. }
  142. #else
  143. void LcdInit()                                                  //LCD初始化子程序
  144. {
  145.         LcdWriteCom(0x32);         //将8位总线转为4位总线
  146.         LcdWriteCom(0x28);         //在四位线下的初始化
  147.         LcdWriteCom(0x0c);  //开显示不显示光标
  148.         LcdWriteCom(0x06);  //写一个指针加1
  149.         LcdWriteCom(0x01);  //清屏
  150.         LcdWriteCom(0x80);  //设置数据指针起点
  151. }
  152. #endif
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表