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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機秒表設計,啟動仿真開始計時LCD1602顯示時分秒

[復制鏈接]
ID:921535 發表于 2021-5-27 16:43 | 顯示全部樓層 |閱讀模式
功能介紹:實現手表功能,
LCD顯示時分秒,
附件包含完整程序及仿真設計。
仿真圖.png

單片機源程序如下:
  1. #include <REG51.h>
  2. #include <intrins.h>
  3. #define N 50000
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define LCD_DB  P1
  7. void display_time();       //聲明顯示時間函數
  8. void LCD_init();           //申明1602初始化函數
  9. void LCD_write_command(uchar dat);    //申明1602寫命令函數
  10. void LCD_write_data(uchar dat);      //申明1602寫數據函數
  11. void delay_n40us(uint n);   //申明延遲函數
  12. uchar shi,fen,miao;                         //全局變量時分秒
  13. uchar tt[]="Welcome 51Luntan";
  14. uint num=0;
  15. /*****************************************
  16. 電路連接?
  17. P1------DB0~DB7
  18. P2.0------RS
  19. P2.1------RW
  20. P2.2------E
  21. *****************************************/
  22. sbit LCD_RS=P2^0;
  23. sbit LCD_RW=P2^1;
  24. sbit LCD_E=P2^2;

  25. //********延時函數***************
  26. void delay_n40us(uint n)
  27. { uint i;
  28. uchar j;
  29. for(i=n;i>0;i--)
  30. for(j=0;j<2;j++);
  31. }
  32. void LCD_init(void)
  33. {
  34. LCD_write_command(0x38);//設置8位格式,2行,5x7
  35. LCD_write_command(0x0c);//整體顯示,關光標,不閃爍
  36. LCD_write_command(0x06);//設定輸入方式,增量不移位--------------
  37. LCD_write_command(0x01);//清除屏幕顯示----------------
  38. delay_n40us(100);     //實踐證明,我的LCD1602上,用for 循環200 次就能可靠完成清屏指令。
  39. }
  40. //********************************
  41. //********寫指令函數***********設置先向1602寫入的數據為地址*
  42. void LCD_write_command(uchar dat)
  43. {
  44. LCD_DB=dat;
  45. LCD_RS=0;//指令
  46. LCD_RW=0;//寫入
  47. LCD_E=1;//允許
  48. LCD_E=0;//產生下降沿
  49. delay_n40us(1);//實踐證明,我的LCD1602 上,用for 循環1 次就能完成普通寫指令。
  50. }
  51. //*******************************
  52. //********再寫數據函數*****向1602中寫入數據********
  53. void LCD_write_data(uchar dat)
  54. {
  55. LCD_DB=dat;
  56. LCD_RS=1;//數據
  57. LCD_RW=0;//寫入
  58. LCD_E=1;//允許
  59. LCD_E=0;//產生下降沿
  60. delay_n40us(1);
  61. }


  62. //************顯示時間**************
  63. void display_time()
  64. {
  65. LCD_init();
  66. LCD_write_command(0x80);   //從第一行顯示T
  67. LCD_write_data('T');
  68. delay_n40us(15000);
  69. LCD_write_data('i');
  70. delay_n40us(15000);
  71. LCD_write_data('m');
  72. delay_n40us(15000);
  73. LCD_write_data('e');
  74. delay_n40us(15000);
  75. LCD_write_data(':');
  76. delay_n40us(15000);
  77. LCD_write_command(0x80+5);          //***顯示時
  78. LCD_write_data(0x30+shi/10);  //****取十位顯示
  79. delay_n40us(15000);
  80. LCD_write_data(0x30+shi%10);        //***取個位顯示
  81. delay_n40us(15000);
  82. LCD_write_data(':');
  83. LCD_write_data(0x30+fen/10);  //顯示分
  84. delay_n40us(15000);
  85. LCD_write_data(0x30+fen%10);
  86. delay_n40us(15000);
  87. LCD_write_data(':');
  88. LCD_write_data(0x30+miao/10);  //顯示秒
  89. delay_n40us(15000);
  90. LCD_write_data(0x30+miao%10);
  91. delay_n40us(15000);
  92. }


  93. //*****T0中斷函數50ms中斷一次**************
  94. void t0_time() interrupt 1
  95. {
  96.   ++num;
  97.   TH0=(65536-N)/256;
  98.   TH0=(65536-N)%256;
  99.   if(num==20)        //計時滿一秒鐘
  100.   {
  101.   num=0;
  102.   ++miao;
  103.   LCD_write_command(0x80+11);
  104.   LCD_write_data(0x30+miao/10);
  105. delay_n40us(15000);
  106. LCD_write_data(0x30+miao%10);
  107. delay_n40us(15000);
  108. if(miao==60)        //計時滿一分鐘
  109. {
  110. miao=0;
  111. ++fen;
  112. LCD_write_command(0x80+8);
  113.   LCD_write_data(0x30+fen/10);
  114. delay_n40us(15000);
  115. LCD_write_data(0x30+fen%10);
  116. delay_n40us(15000);
  117. LCD_write_data(':');
  118. delay_n40us(15000);
  119. if(fen==60)        //計時滿一小時
  120. {
  121. fen=0;
  122. ++shi;
  123. LCD_write_command(0x80+5);
  124.   LCD_write_data(0x30+shi/10);
  125. delay_n40us(15000);
  126. LCD_write_data(0x30+shi%10);
  127. delay_n40us(15000);
  128. LCD_write_data(':');
  129. delay_n40us(15000);
  130. if(shi==24)             //計時滿一天
  131. {
  132. shi=0;
  133. }
  134. }
  135. }

  136.   }
  137. }



  138. //**************main函數***********
  139. main()
  140. {
  141. int h;
  142. shi=0;
  143. fen=0;
  144. miao=0;
  145. display_time();         //顯示初始時間0
  146. LCD_write_command(0x80+64);//從第二行開始顯示
  147. for(h=0;h<16;++h)                   //顯示定義好的字符串
  148. {
  149. LCD_write_data(tt[h]);
  150. delay_n40us(15000);
  151. }
  152. TH0=(65536-N)/256;          //載入計數初值高八位
  153. TH0=(65536-N)%256;          //載入計數初值低八位
  154. EA=1;                                   //開中斷權限
  155. ET0=1;                                   //開T0中斷
  156. TR0=1;                                   //定時開始
  157. TMOD=0x01;                           //選用模式1定時
  158. while(1);                                //等待中斷
  159. }
復制代碼

所有資料51hei提供下載:
利用定時中斷設計手表LCD1602顯示時分秒.zip (64.88 KB, 下載次數: 43)




回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人福利在线观看 | 五月槐花香 | 免费能直接在线观看黄的视频 | 久久久精品一区二区三区 | 一区观看 | 国产999精品久久久影片官网 | 久久爱黑人激情av摘花 | 国产激情网 | 男女黄网站 | 亚洲视频免费在线观看 | 久久久久久九九九九 | 国产av毛片| 精品中文字幕一区二区三区 | av免费网站在线观看 | 超碰日韩| 久草网免费 | 欧美一级二级视频 | 亚洲一区二区免费电影 | 免费看91 | 欧美日韩在线免费观看 | 亚洲狠狠爱 | 久久久国产一区二区三区 | 精精精精xxxx免费视频 | 欧美成人一区二免费视频软件 | 国产一区二区在线视频 | 最新中文字幕在线 | 日本爱爱 | 日韩中文字幕在线免费 | 亚洲成人av| 国产高清免费在线 | 久久小视频 | 久色激情 | 免费毛片网站 | 亚洲精品无 | 欧美三级电影在线播放 | 国产高清一区二区三区 | 国产一级淫片免费视频 | 久久久国产精品一区 | 欧美情趣视频 | 国产欧美精品一区二区 | 97日韩精品 |