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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4389|回復: 0
收起左側

[單片機LCD驅動程序分享] LCD1602時間顯示

[復制鏈接]
ID:437310 發表于 2019-12-8 18:39 | 顯示全部樓層 |閱讀模式
LCD1602 時間顯示
2019-12-08.png
Proteus




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
2019-12-08 (2).png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区二三区在线观看 | 日韩在线看片 | 99这里只有精品视频 | 中文字幕久久精品 | 日韩成人免费av | 国产三区av | 国产色99 | 色偷偷噜噜噜亚洲男人 | 五月综合激情婷婷 | 欧美一级在线 | 国产1区2区 | 国产精品欧美一区二区 | 精品国产一二三区 | 久久69精品久久久久久久电影好 | 中文字字幕一区二区三区四区五区 | 亚洲伊人精品酒店 | 欧美视频成人 | 成人av电影免费在线观看 | 一级黄色影片在线观看 | 日本字幕在线观看 | 久草网免费| 福利视频日韩 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 欧美视频精品 | 一区二区三区四区在线视频 | 国产一区三区视频 | 黄色一级大片在线免费看产 | 亚洲 欧美 另类 综合 偷拍 | 国产精品久久久久av | 久久久国产一区二区三区 | 午夜国产 | 国产精品久久久久久久久久免费看 | 精品福利在线 | 亚洲精品免费在线观看 | 欧美不卡一区二区三区 | 激情91 | 日韩成人免费视频 | 国产精品无码永久免费888 | 午夜激情一区 | 国色天香综合网 | 久久在线 |