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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4280|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

[單片機(jī)LCD驅(qū)動(dòng)程序分享] LCD1602時(shí)間顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
LCD1602 時(shí)間顯示

Proteus
時(shí)間為Unix timestamp




AT89C51單片機(jī)源程序如下:
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. }
復(fù)制代碼

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 延時(shí)函數(shù)
  17. *
  18. * @param us 延時(shí)時(shí)間
  19. * @return None
  20. */
  21. static void Delay(int us) {
  22.   while (us-- > 0) {
  23.     _nop_();
  24.   }
  25. }

  26. /**
  27. * @brief 液晶I/O 口復(fù)位
  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 寫數(shù)據(jù)/指令函數(shù)
  54. *
  55. * @param val 8位數(shù)據(jù)
  56. * @param is_data true 是數(shù)據(jù), 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 顯示函數(shù)
  84. *
  85. * @param addr_x (0~15) 橫坐標(biāo)
  86. * @param addr_y (0~1) 縱坐標(biāo)
  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. }
復(fù)制代碼


驅(qū)動(dòng)程序(Keil + Proteus)
lcd1602.zip (47.8 KB, 下載次數(shù): 24)

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


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久中文字幕 | 伊人网综合| 亚洲天堂免费在线 | 亚洲激情视频在线 | 韩日一区二区三区 | 在线观看亚洲 | 国产精品久久久久久久久久久久午夜片 | 亚洲精品一区二区三区蜜桃久 | 亚洲欧洲在线视频 | 在线播放日韩 | 青青草综合 | 操夜夜 | 日韩一级免费观看 | 中文字幕一区二区三区四区五区 | 欧美日韩国产三级 | 欧美一区二区在线观看 | 国产成人精品区一区二区不卡 | 国产aa| 国产一区二区三区在线看 | 黄色福利| 国产精品一区二区三区久久久 | 亚洲精品一区在线观看 | 久久久久久国产免费视网址 | 香蕉久久a毛片 | 国产成人精品一区二区三区网站观看 | av资源中文在线天堂 | 二区不卡| 国产1区在线 | 中文字幕第十一页 | 国产精品久久久久久久久久久免费看 | 操亚洲 | 国产精品久久99 | 日本中文字幕视频 | 国产精品欧美一区二区三区 | 国内精品伊人久久久久网站 | 国产精品99久久久久久宅男 | 天天玩天天操天天干 | 99久久久国产精品 | 亚洲欧美中文日韩在线v日本 | 日韩欧美在线免费观看 | 精品久久久一区 |