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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3010|回復: 2
收起左側

利用單片機定時器中斷頻率計實現代碼

[復制鏈接]
ID:521113 發表于 2019-4-25 21:16 | 顯示全部樓層 |閱讀模式
電路原理圖如下:
捕獲.PNG

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char          //數據類型宏定義
  4. #define uint unsigned int
  5. #define out  P0                                  //IO端口定義
  6. sbit RS=P2^0;
  7. sbit RW=P2^1;
  8. sbit EN=P2^2;
  9. uint i = 0;         //全局變量
  10. uint j;
  11. uint cnt=0;
  12. uchar display[]={'0','1','2','3','4','5','6','7','8','9'};
  13. void Delay4us()
  14. {
  15.         _nop_();_nop_();_nop_();_nop_();
  16. }
  17. //延時
  18. void delay (int ms)
  19. {
  20.   uchar i;
  21.         while(--ms)
  22.                 for(i=0;i<250;i++)
  23.                         Delay4us();
  24. }

  25. //LCD忙檢測,返回1則忙
  26. bit LCD_Busy_Check()
  27. {
  28.   bit result;
  29.   RS=0;
  30.         RW=1;
  31.         EN=1;
  32.         Delay4us();
  33.         result=(bit)(P0&0x80);
  34.   EN=0;
  35.   return result;
  36. }

  37. //寫指令給P0
  38. void LCD_Write_Command(uchar cmd)
  39. {
  40.   while (LCD_Busy_Check());
  41.   RS=0;
  42.         RW=0;
  43.         EN=0;
  44.         _nop_();
  45.         _nop_();
  46.   P0=cmd;
  47.         Delay4us();
  48.   EN=1;
  49.         Delay4us();
  50.         EN=0;
  51. }

  52. //寫數據給P0
  53. void LCD_Write_Data(uchar dat)
  54. {
  55. while(LCD_Busy_Check());
  56.         RS=1;
  57.         RW=0;
  58.         EN=0;
  59.         P0=dat;
  60.         Delay4us();
  61.   EN=1;
  62.         Delay4us();
  63.         EN=0;
  64. }

  65. //LCD初始化
  66. void LCD_Initialise()
  67. {
  68.   LCD_Write_Command(0x38);//顯示初始化
  69.         delay(5);
  70.   LCD_Write_Command(0x0c); //開顯示
  71.         delay(5);
  72.   LCD_Write_Command(0x06);//讀寫后指針加一
  73.         delay(5);
  74.   LCD_Write_Command(0x01);        //清屏
  75.         delay(5);
  76. }
  77. /***********主函數*******************************************************/
  78. void main(void)
  79. {
  80.         uchar ge=0;
  81.         uchar shi=0;
  82.         uchar bai=0;
  83.         uchar qian=0;
  84.         TMOD=0x15;            // 定時器0工作于計數方式,工作方式1,16位計數
  85.                               // 定時器1工作于定時方式,工作方式1,16位定時
  86.         TH0=0;                                                                // 清零計數器
  87.         TL0=0;
  88.         TH1=0x4C;                                                        // 12M晶振工作下,定時50ms
  89.         TL1=0x00;
  90.         TR0=1;                                                                // 啟動定時器0
  91.         TR1=1;                                                                // 啟動定時器1
  92.         IE=0x88;                                                        // 打開定時中斷1和總中斷
  93.         LCD_Initialise();
  94.         while(1)
  95.         {                        
  96.                 qian=cnt/1000;
  97.                 bai=cnt%1000/100;
  98.                 shi=cnt%100/10;
  99.                 ge=cnt%10;
  100.                 LCD_Write_Command(0x80);
  101.                 LCD_Write_Data(display[qian]);
  102.                 LCD_Write_Command(0x81);
  103.                 LCD_Write_Data(display[bai]);
  104.                 LCD_Write_Command(0x82);
  105.                 LCD_Write_Data(display[shi]);
  106.                 LCD_Write_Command(0x83);
  107.                 LCD_Write_Data(display[ge]);
  108.                 LCD_Write_Data('h');
  109.                 LCD_Write_Data('z');
  110.         }                  
  111. }

  112. /***********計數器T0中斷處理函數******************************************/
  113. void Timer1_ISR() interrupt 3
  114. {
  115.         static char j = 0;
  116.         i++;
  117.         TH1=0x4C;                                                   // 重設定時器值,50ms @ 12MHz XTAL
  118.         TL1=0x00;
  119.         if(++j == 20)                                           // 50ms * 20 = 1S
  120.         {                          
  121.                 j = 0;
  122.                 i = (TH0 << 8) | TL0;                   // 1S內的計數值
  123.                 cnt=i;
  124.                 i=0;
  125.                 TH0 = 0;                                           // 清零計數
  126.                 TL0 = 0;         
  127.         }
  128. }
復制代碼


回復

使用道具 舉報

ID:656668 發表于 2019-12-19 14:18 來自觸屏版 | 顯示全部樓層
怎么使用呢
回復

使用道具 舉報

ID:677584 發表于 2020-1-3 17:22 來自觸屏版 | 顯示全部樓層
范圍多少
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品电影网在线观看 | 视频二区 | 男女精品久久 | 国产在线观 | 国产九九av | 91精品国产91久久久久久 | 黄色免费观看 | 国产精品国产a级 | 一区二区三区免费在线观看 | 国产精品高潮呻吟久久aⅴ码 | 国产视频一二三区 | 婷婷五月色综合 | 日本一区二区不卡视频 | 精品欧美一区二区三区免费观看 | av中文字幕在线观看 | 日韩高清一区二区 | 精品一区二区三 | 亚洲国产欧美一区二区三区久久 | 日本精品视频一区二区 | 亚洲区视频 | 亚洲视频免费观看 | 亚洲va国产日韩欧美精品色婷婷 | 日韩av在线一区 | 久久久久久九九九九 | 亚洲一区免费在线 | 欧美成人二区 | 成人超碰 | 国产欧美精品区一区二区三区 | 国产一区二区三区四区 | 午夜视频在线免费观看 | 刘亦菲国产毛片bd | 97日日碰人人模人人澡分享吧 | 在线视频中文字幕 | 波多野结衣中文视频 | 一区二区三区高清 | 国产综合精品一区二区三区 | 久久精品视频99 | 久久国产精99精产国高潮 | 一级做a爰片性色毛片16 | 亚洲视频国产视频 | 久久小视频 |