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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機時間顯示 LCD1602.c LCD1602.h文件分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:995076 發(fā)表于 2022-1-13 16:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用定時器和lcd1602做的一個簡單計時器。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <REGX51.H>
  2. #include "LCD1602.h"
  3. unsigned char miao,fen,shi;
  4. //定時器
  5. void InitTimer0(void)
  6. {
  7.     TMOD = 0x01;
  8.     TH0 = 0xff;
  9.     TL0 = 0xA4;
  10.     EA = 1;
  11.     ET0 = 1;
  12.     TR0 = 1;
  13. }
  14. //主函數(shù)
  15. void main()
  16. {
  17.         InitTimer0();//定時器初始化
  18.         LCD_Init();//1602初始化
  19.         LCD_ShowString(1,1,"TIME:");
  20.         LCD_ShowChar(2,3,':');
  21.         LCD_ShowChar(2,6,':');
  22.         while(1)
  23.         {
  24.                 LCD_ShowNum(2,1,shi,2);
  25.                 LCD_ShowNum(2,4,fen,2);
  26.                 LCD_ShowNum(2,7,miao,2);
  27.         }
  28. }

  29. void Timer0Interrupt(void) interrupt 1
  30. {
  31.   unsigned int jia; //長整型
  32.     TH0 = 0xff;
  33.     TL0 = 0xA4;
  34.         jia++;
  35.         if(jia>=10000)
  36.         {
  37.                 jia=0;
  38.                 miao++;
  39.                 if(miao>=60)
  40.                 {
  41.                         miao=0;
  42.                         fen++;
  43.                         if(fen>=60)
  44.                         {
  45.                                 fen=0;
  46.                                 shi++;
  47.                                 if(shi>=24)
  48.                                 {
  49.                                         shi=0;
  50.                                 }
  51.                         }
  52.                 }
  53.         }
  54. }
復(fù)制代碼
  1. #include <REGX52.H>

  2. //引腳配置:
  3. sbit LCD_RS=P2^6;
  4. sbit LCD_RW=P2^5;
  5. sbit LCD_EN=P2^7;
  6. #define LCD_DataPort P0

  7. //函數(shù)定義:
  8. /**
  9.   * @brief  LCD1602延時函數(shù),12MHz調(diào)用可延時1ms
  10.   * @param  無
  11.   * @retval 無
  12.   */
  13. void LCD_Delay()
  14. {
  15.         unsigned char i, j;

  16.         i = 2;
  17.         j = 239;
  18.         do
  19.         {
  20.                 while (--j);
  21.         } while (--i);
  22. }

  23. /**
  24.   * @brief  LCD1602寫命令
  25.   * @param  Command 要寫入的命令
  26.   * @retval 無
  27.   */
  28. void LCD_WriteCommand(unsigned char Command)
  29. {
  30.         LCD_RS=0;
  31.         LCD_RW=0;
  32.         LCD_DataPort=Command;
  33.         LCD_EN=1;
  34.         LCD_Delay();
  35.         LCD_EN=0;
  36.         LCD_Delay();
  37. }

  38. /**
  39.   * @brief  LCD1602寫數(shù)據(jù)
  40.   * @param  Data 要寫入的數(shù)據(jù)
  41.   * @retval 無
  42.   */
  43. void LCD_WriteData(unsigned char Data)
  44. {
  45.         LCD_RS=1;
  46.         LCD_RW=0;
  47.         LCD_DataPort=Data;
  48.         LCD_EN=1;
  49.         LCD_Delay();
  50.         LCD_EN=0;
  51.         LCD_Delay();
  52. }

  53. /**
  54.   * @brief  LCD1602設(shè)置光標位置
  55.   * @param  Line 行位置,范圍:1~2
  56.   * @param  Column 列位置,范圍:1~16
  57.   * @retval 無
  58.   */
  59. void LCD_SetCursor(unsigned char Line,unsigned char Column)
  60. {
  61.         if(Line==1)
  62.         {
  63.                 LCD_WriteCommand(0x80|(Column-1));
  64.         }
  65.         else if(Line==2)
  66.         {
  67.                 LCD_WriteCommand(0x80|(Column-1+0x40));
  68.         }
  69. }

  70. /**
  71.   * @brief  LCD1602初始化函數(shù)
  72.   * @param  無
  73.   * @retval 無
  74.   */
  75. void LCD_Init()
  76. {
  77.         LCD_WriteCommand(0x38);//八位數(shù)據(jù)接口,兩行顯示,5*7點陣
  78.         LCD_WriteCommand(0x0c);//顯示開,光標關(guān),閃爍關(guān)
  79.         LCD_WriteCommand(0x06);//數(shù)據(jù)讀寫操作后,光標自動加一,畫面不動
  80.         LCD_WriteCommand(0x01);//光標復(fù)位,清屏
  81. }

  82. /**
  83.   * @brief  在LCD1602指定位置上顯示一個字符
  84.   * @param  Line 行位置,范圍:1~2
  85.   * @param  Column 列位置,范圍:1~16
  86.   * @param  Char 要顯示的字符
  87.   * @retval 無
  88.   */
  89. void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
  90. {
  91.         LCD_SetCursor(Line,Column);
  92.         LCD_WriteData(Char);
  93. }

  94. /**
  95.   * @brief  在LCD1602指定位置開始顯示所給字符串
  96.   * @param  Line 起始行位置,范圍:1~2
  97.   * @param  Column 起始列位置,范圍:1~16
  98.   * @param  String 要顯示的字符串
  99.   * @retval 無
  100.   */
  101. void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
  102. {
  103.         unsigned char i;
  104.         LCD_SetCursor(Line,Column);
  105.         for(i=0;String[i]!='\0';i++)
  106.         {
  107.                 LCD_WriteData(String[i]);
  108.         }
  109. }

  110. /**
  111.   * @brief  返回值=X的Y次方
  112.   */
  113. int LCD_Pow(int X,int Y)
  114. {
  115.         unsigned char i;
  116.         int Result=1;
  117.         for(i=0;i<Y;i++)
  118.         {
  119.                 Result*=X;
  120.         }
  121.         return Result;
  122. }

  123. /**
  124.   * @brief  在LCD1602指定位置開始顯示所給數(shù)字
  125.   * @param  Line 起始行位置,范圍:1~2
  126.   * @param  Column 起始列位置,范圍:1~16
  127.   * @param  Number 要顯示的數(shù)字,范圍:0~65535
  128.   * @param  Length 要顯示數(shù)字的長度,范圍:1~5
  129.   * @retval 無
  130.   */
  131. void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  132. {
  133.         unsigned char i;
  134.         LCD_SetCursor(Line,Column);
  135.         for(i=Length;i>0;i--)
  136.         {
  137.                 LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');
  138.         }
  139. }

  140. /**
  141.   * @brief  在LCD1602指定位置開始以有符號十進制顯示所給數(shù)字
  142.   * @param  Line 起始行位置,范圍:1~2
  143.   * @param  Column 起始列位置,范圍:1~16
  144.   * @param  Number 要顯示的數(shù)字,范圍:-32768~32767
  145.   * @param  Length 要顯示數(shù)字的長度,范圍:1~5
  146.   * @retval 無
  147.   */
  148. void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
  149. {
  150.         unsigned char i;
  151.         unsigned int Number1;
  152.         LCD_SetCursor(Line,Column);
  153.         if(Number>=0)
  154.         {
  155.                 LCD_WriteData('+');
  156.                 Number1=Number;
  157.         }
  158.         else
  159.         {
  160.                 LCD_WriteData('-');
  161.                 Number1=-Number;
  162.         }
  163.         for(i=Length;i>0;i--)
  164.         {
  165.                 LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');
  166.         }
  167. }

  168. /**
  169.   * @brief  在LCD1602指定位置開始以十六進制顯示所給數(shù)字
  170.   * @param  Line 起始行位置,范圍:1~2
  171.   * @param  Column 起始列位置,范圍:1~16
  172.   * @param  Number 要顯示的數(shù)字,范圍:0~0xFFFF
  173.   * @param  Length 要顯示數(shù)字的長度,范圍:1~4
  174.   * @retval 無
  175.   */
  176. void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  177. {
  178.         unsigned char i,SingleNumber;
  179.         LCD_SetCursor(Line,Column);
  180.         for(i=Length;i>0;i--)
  181.         {
  182.                 SingleNumber=Number/LCD_Pow(16,i-1)%16;
  183.                 if(SingleNumber<10)
  184.                 {
  185.                         LCD_WriteData(SingleNumber+'0');
  186.                 }
  187.                 else
  188.                 {
  189.                         LCD_WriteData(SingleNumber-10+'A');
  190.                 }
  191.         }
  192. }

  193. /**
  194.   * @brief  在LCD1602指定位置開始以二進制顯示所給數(shù)字
  195.   * @param  Line 起始行位置,范圍:1~2
  196.   * @param  Column 起始列位置,范圍:1~16
  197.   * @param  Number 要顯示的數(shù)字,范圍:0~1111 1111 1111 1111
  198.   * @param  Length 要顯示數(shù)字的長度,范圍:1~16
  199.   * @retval 無
  200.   */
  201. void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
  202. {
  203.         unsigned char i;
  204.         LCD_SetCursor(Line,Column);
  205.         for(i=Length;i>0;i--)
  206.         {
  207.                 LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');
  208.         }
  209. }
復(fù)制代碼


所有資料51hei附件下載:
1602計數(shù)器(帶仿真).7z (93.48 KB, 下載次數(shù): 25)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院在线观看 | 97视频精品 | 精精精精xxxx免费视频 | 欧美一级片在线观看 | 麻豆精品国产91久久久久久 | 日韩综合网 | 亚洲成av片人久久久 | 亚洲精品在线国产 | 国产免费拔擦拔擦8x高清 | 国产成人99久久亚洲综合精品 | 国产一区二区三区在线看 | 一区二区中文 | 伊人伊成久久人综合网站 | 欧美黑人一级爽快片淫片高清 | 国产精品欧美一区二区三区不卡 | 欧美一区二区三区在线 | 欧美一区二区在线观看视频 | 精品国产91乱码一区二区三区 | 黄色一级网 | 国产 日韩 欧美 在线 | 伊人国产精品 | 欧美性猛交一区二区三区精品 | 中文字幕在线欧美 | 超黄毛片 | 亚洲日韩中文字幕一区 | 99久久婷婷国产综合精品电影 | 日韩中文字幕在线观看 | 欧美电影免费网站 | 久久久精品一区二区三区 | 99久久久99久久国产片鸭王 | 久草综合在线视频 | 麻豆久久久久久久 | 久久精品亚洲精品国产欧美 | 一区二区福利视频 | 日韩在线免费视频 | 香蕉久久久 | 亚洲精品久久久久久久久久久久久 | 99久久精品国产毛片 | 91免费电影| 国产一级在线观看 | 亚洲福利视频一区二区 |