51单片机控制LCD1602常用函数

[复制链接]
查看1 | 回复0 | 2021-5-6 01:16:40 | 显示全部楼层 |阅读模式
LCD1602的11条指令详解
  1. FAQ:LCD1602液晶屏的第二行不显示
  2. 初始化的时候,写38写两次并且不判忙
  3. /****************************************************************
  4. LCD1602 初始化函数 LCD1602_INIT();
  5. 无形参和返回值
  6. ****************************************************************/
  7. void Init_LCD1602(void)
  8. {
  9. LCD_EN = 0;
  10. LCD_BG = 0; // 背光灯 开;
  11. LCD_RW = 0; // 配置LCD1602为写入模式

  12. LCD1602_Write(0x38, 0); // 显示模式设定: 配置16*2显示,5*7点阵,8位数据接口
  13. LCD1602_Write(0x0C, 0); // 设置开显示,不显示光标 开关显示、光标有无设置、光标闪烁设置
  14. LCD1602_Write(0x06, 0); // 写字符后地址自动加1 写一个字符后指针加一
  15. LCD1602_Write(0x01, 0); // 显示清0,数据指针清0
  16. LCD1602_Write(0x38, 0); // 显示模式设定: 配置16*2显示,5*7点阵,8位数据接口
  17. }


  18. 在LCD 1602 的字符显示中,如需进行数字转换 需 + 48;
  19. 相当是 10进制数 + 48后,转换成 对应的 ‘0’ 字符 ASCII 码,方可显示在 LCD 屏上;
  20. /*********************************************************
  21. 函数:Lcd1602_Print_Num(uchar num)
  22. 输入:有;数值;
  23. 输出:无;
  24. 说明:液晶输出数字

  25. u8  -> 256
  26. u16 -> 65535
  27. *********************************************************/
  28. void LCD1602_Write_Num(u16 num)
  29. {
  30. if(num >= 1000) // 4位
  31. {
  32. LCD1602_Write(num/1000 + 48, 1);  // 千位

  33. LCD1602_Write(num / 100 % 10 + 48, 1);  // 百位
  34. LCD1602_Write(num / 10 % 10 + 48, 1);    // 十位
  35. LCD1602_Write(num % 10 + 48, 1);    // 个位

  36. }
  37. else if(num >= 100) // 3位数;
  38. {
  39. LCD1602_Write(num/100 + 48, 1);  // 百位

  40. LCD1602_Write(num % 100 / 10 + 48, 1);  // 十位
  41. LCD1602_Write(num % 10 + 48, 1);    // 个位

  42. }
  43. else if( num >= 10)
  44. {
  45. LCD1602_Write(0 + 48, 1);  // 补 0缺;
  46. LCD1602_Write(num/10 + 48, 1);  // 十位
  47. LCD1602_Write(num%10 + 48, 1);    // 个位
  48. }
  49. else if( num >= 0)
  50. {
  51. LCD1602_Write(0 + 48, 1);  // 补 0缺;
  52. LCD1602_Write(0 + 48, 1);  // 补 0缺;
  53. LCD1602_Write(num%10 + 48, 1);    // 个位
  54. }

  55. }
复制代码
回复

使用道具 举报

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

本版积分规则