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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3460|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:921535 發(fā)表于 2021-5-27 16:43 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
功能介紹:實現手表功能,
LCD顯示時分秒,
附件包含完整程序及仿真設計。


單片機源程序如下:
  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 循環(huán)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 循環(huán)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)




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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区在线观看视频 | 97国产爽爽爽久久久 | 国产精品爱久久久久久久 | 男女免费在线观看视频 | 亚洲精品福利在线 | 美国av毛片 | 日韩a在线| 7799精品视频天天看 | 男女羞羞视频在线免费观看 | 亚洲激情自拍偷拍 | 天天艹日日干 | 91动漫在线观看 | 精品福利av导航 | 亚洲精品在线免费观看视频 | 男人的天堂在线视频 | 欧美在线综合 | 欧产日产国产精品国产 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产精品无码永久免费888 | 欧美精品在线一区二区三区 | 特级黄一级播放 | 亚洲激情在线视频 | 午夜视频在线观看一区二区 | 国产精品久久久久无码av | 少妇久久久久 | 毛片.com| 日韩一区在线视频 | 国产一区二区三区久久久久久久久 | 亚洲一区视频 | 日韩在线观看网站 | 国产一区精品在线 | 911网站大全在线观看 | 91久久综合 | 国产国语精品 | av乱码| 精品国产精品国产偷麻豆 | 一本色道精品久久一区二区三区 | 欧美福利| 999精彩视频 | 日韩成人免费视频 | 国产乱码精品一区二区三区中文 |