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

標題: [單片機LCD驅動程序分享] LCD1602時間顯示 [打印本頁]

作者: Kiyotaka    時間: 2019-12-8 18:39
標題: [單片機LCD驅動程序分享] LCD1602時間顯示
LCD1602 時間顯示

Proteus
時間為Unix timestamp




AT89C51單片機源程序如下:
main.c
  1. /**
  2. * @file main.c
  3. * @author Kiyotaka
  4. * @brief Unix timestamp on LCD1602
  5. * @version 0.1
  6. * @date 2019-12-08
  7. *
  8. * @copyright Copyright (c) 2019
  9. *
  10. */
  11. #include "main.h"
  12. #include "lcd1602.h"

  13. void Delay1000ms(void);

  14. unsigned long int timestamp = 157579655;

  15. int main(void) {
  16.   LCD1602_Init();
  17.   LCD1602_Printf(0, 0, "Unix timestamp:");
  18.   while (1) {
  19.     LCD1602_Printf(0, 1, "%ld", timestamp++);
  20.     Delay1000ms();
  21.   }
  22. }

  23. void Delay1000ms(void) {  //@12.000MHz

  24.   unsigned char i = 8;
  25.   unsigned char j = 154;
  26.   unsigned char k = 122;

  27.   _nop_();
  28.   do {
  29.     do {
  30.       while (--k);
  31.     } while (--j);
  32.   } while (--i);
  33. }
復制代碼

lcd1602.c
  1. /**
  2. * @file lcd1602.c
  3. * @author Kiyotaka
  4. * @brief LCD1602 driver
  5. * @version 0.1
  6. * @date 2019-12-08
  7. *
  8. * @copyright Copyright (c) 2019
  9. *
  10. */
  11. #include "lcd1602.h"

  12. typedef enum { GPIO_PIN_RESET = 0, GPIO_PIN_SET } GPIO_PinState;

  13. #define RS_CMD GPIO_PIN_RESET
  14. #define RS_DATA GPIO_PIN_SET

  15. /**
  16. * @brief 延時函數
  17. *
  18. * @param us 延時時間
  19. * @return None
  20. */
  21. static void Delay(int us) {
  22.   while (us-- > 0) {
  23.     _nop_();
  24.   }
  25. }

  26. /**
  27. * @brief 液晶I/O 口復位
  28. *
  29. * @return None
  30. */
  31. static void PinReset(void) {
  32.   LCD1602_E_Pin = GPIO_PIN_RESET;
  33.   LCD1602_RS_Pin = GPIO_PIN_RESET;
  34.   LCD1602_RW_Pin = GPIO_PIN_RESET;
  35.   LCD1602_Port = 0xFF;
  36. }

  37. /**
  38. * @brief LCD1602 等待液晶空閑
  39. *
  40. *@return None
  41. */
  42. static void WaitIdleTime(void) {
  43.   LCD1602_RS_Pin = RS_CMD;
  44.   LCD1602_RW_Pin = GPIO_PIN_SET;
  45.   LCD1602_Port = 0x00;
  46.   LCD1602_E_Pin = GPIO_PIN_SET;
  47.   do {
  48.     Delay(100);
  49.   } while ((LCD1602_Port & 0x80) >> 7);
  50.   PinReset();
  51. }

  52. /**
  53. * @brief LCD1602 寫數據/指令函數
  54. *
  55. * @param val 8位數據
  56. * @param is_data true 是數據, false 是指令
  57. * @return None
  58. */
  59. static void Write(unsigned char val, bit is_data) {
  60.   bit interrupt_stat = EA;

  61.   EA = 0;
  62.   WaitIdleTime();
  63.   LCD1602_RS_Pin = is_data;
  64.   LCD1602_Port = val;
  65.   LCD1602_E_Pin = GPIO_PIN_SET;
  66.   Delay(100);
  67.   PinReset();
  68.   EA = interrupt_stat;
  69. }

  70. /**
  71. * @brief LCD1602 初始化
  72. *
  73. * @return None
  74. */
  75. void LCD1602_Init(void) {
  76.   PinReset();
  77.   Write(0x38, RS_CMD);
  78.   Write(0x0C, RS_CMD);
  79.   Write(0x06, RS_CMD);
  80.   Write(0x01, RS_CMD);
  81. }

  82. /**
  83. * @brief LCD1602 顯示函數
  84. *
  85. * @param addr_x (0~15) 橫坐標
  86. * @param addr_y (0~1) 縱坐標
  87. * @param fmt 格式化字符串
  88. * @param ...
  89. * @return int
  90. */
  91. int LCD1602_Printf(int addr_x, int addr_y, const char *fmt, ...) {
  92.   char buf[20] = {0};
  93.   char *p = buf;
  94.   int ret = 0;
  95.   va_list args;

  96.   va_start(args, fmt);
  97.   ret = vsprintf(p, fmt, args);
  98.   va_end(args);

  99.   Write(0x80 + 0x40 * addr_y + addr_x, RS_CMD);
  100.   while (*p != '\0') {
  101.     if (*p == '\f') {
  102.       Write(0x01, RS_CMD);
  103.     } else if (isprint(*p) != 0) {
  104.       Write(*p, RS_DATA);
  105.     }
  106.     p++;
  107.   }

  108.   return ret;
  109. }
復制代碼


驅動程序(Keil + Proteus)
lcd1602.zip (47.8 KB, 下載次數: 24)

如果注釋為亂碼,Keil的Encoding設置成UTF-8







歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 四虎影院永久免费 | 国产精品二区一区二区aⅴ污介绍 | 久久男人的天堂 | 久草综合网| 亚洲精品在线免费 | 日本伊人| 国产欧美久久久 | 毛片中文字幕 | 亚洲综合激情网 | 国产裸体永久免费视频网站 | 欧美日韩免费视频 | 日韩视频网 | 国产传媒av | 中文字幕中文字幕 | 久久久久一区二区 | 日本一级大毛片a一 | 大香伊人网 | 午夜在线| 97国产视频| 一区二区免费看 | 欧美日韩一二三 | 久综合 | 一区二区不卡 | 午夜久久精品 | 日韩色在线 | 97精品视频 | 久久999 | 精品国产91乱码一区二区三区 | 亚洲精品一 | 欧美成人免费视频 | av青青草| 91午夜理伦私人影院 | 国产午夜精品一区二区三区视频 | 一道本在线视频 | 日韩欧美自拍 | 日本欧美在线 | 一级毛片在线免费观看 | 国产黄色免费 | 亚洲精品成人网 | 人人看人人干 | 国产欧美精品一区二区色综合 |