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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機實驗 定時器的應用實驗

[復制鏈接]
跳轉到指定樓層
樓主
ID:146314 發表于 2016-11-5 20:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
之前做過的實驗   
通過P3.4和P3.5來調節發生頻率
  1. #include "reg52.h"

  2. sbit BeepPin                =P2^5; //定義蜂鳴器引腳

  3. sbit IncKey                        =P3^4; //定義按鍵引腳
  4. sbit DecKey                        =P3^5;

  5. #define FOSC                (11059200L)        //Hz
  6. #define WANTTIME        (10)                 //ms
  7. #define VTHX                (65536-WANTTIME*FOSC/12000)/256        //計算定時初值
  8. #define VTLX                (65536-WANTTIME*FOSC/12000)%256

  9. #define BEEPON                (0)         //使蜂鳴器發聲的電平
  10. #define BEEPOFF                (1)         //使蜂鳴器不發聲的電平

  11. #define INCKEY                (1)         //定義鍵值
  12. #define DECKEY                (2)
  13. #define NOKEY                (3)

  14. #define TRUE                (1)         //定義真常量
  15. #define FALSE                (0)         //定義假常量

  16. //定義延時運行值變量和設置值變量
  17. unsigned int DelayTime_Run,DelayTime_Set;
  18. unsigned char TimeIsUpFlag; //定義時間到標志變量
  19. bit BeepOutValue; //控制蜂鳴器的輸出變量,用于刷新到BeepPin

  20. //初始化函數
  21. void Init(void)
  22. {
  23. DelayTime_Set=100; //為各變量賦初值
  24. TimeIsUpFlag=TRUE;

  25. BeepOutValue=BEEPOFF;

  26. IncKey=1; //關閉按鍵口線內部的鎖存器
  27. DecKey=1;

  28. TMOD=0x01;        //初始化定時器T0
  29. TL0=VTLX;
  30. TH0=VTHX;

  31. ET0=1;         //使用T0中斷
  32. EA=1;

  33. TR0=1;         //啟動T0
  34. }

  35. //清除時間到標志變量
  36. void ClearTimeUpFlag(void)
  37. {
  38. TimeIsUpFlag=FALSE;
  39. }

  40. //讀取時間到標志變量的值
  41. unsigned char GetTimeUpFlag(void)
  42. {
  43. return(TimeIsUpFlag);
  44. }

  45. //設置延時時間
  46. //xTime為延時時間,范圍1~65535
  47. void SetDelayTime(unsigned int xTime)
  48. {
  49. DelayTime_Run=xTime;
  50. }

  51. //按鍵函數
  52. //返回為值為相應鍵的鍵值或NOKEY
  53. unsigned char Key(void)
  54. {
  55. unsigned char RetValue=NOKEY;

  56. if(IncKey==0) RetValue=INCKEY;
  57. if(DecKey==0) RetValue=DECKEY;

  58. while((IncKey==0)||(DecKey==0));

  59. return(RetValue);
  60. }

  61. //主函數
  62. void main(void)
  63. {
  64. unsigned char Temp; //聲明局部變量

  65. Init(); //調用初始化函數

  66. while(1){
  67.   Temp=Key(); //調用按鍵函數
  68.   switch(Temp){        //處理按鍵
  69.    case INCKEY:
  70.                                 DelayTime_Set+=10;
  71.                                    break;
  72.    case DECKEY:
  73.                                 if(DelayTime_Set>0)
  74.                                  DelayTime_Set-=10;
  75.                                    break;
  76.    default: ;
  77.   }

  78.   BeepOutValue^=1; //蜂鳴器輸出變量狀態取反
  79.   BeepPin=BeepOutValue;        //刷新蜂鳴器
  80.   ClearTimeUpFlag(); //清除時間到標志
  81.   SetDelayTime(DelayTime_Set); //設置延時時間
  82.   while(GetTimeUpFlag()==FALSE); //等待時間到
  83.   //此處的循環會導致對按鍵的響應速度變慢!
  84.   //解決辦法:多按一會再放手
  85. }
  86. }

  87. //T0的中斷服務函數
  88. void T0Int(void) interrupt 1
  89. {
  90. TL0=VTLX; //恢復定時初值
  91. TH0=VTHX;

  92. if(DelayTime_Run>0) //操作延時運行值變量,其到0時時間到
  93.   {DelayTime_Run--; TimeIsUpFlag=FALSE;}
  94. else
  95.   TimeIsUpFlag=TRUE; //時間到,設置時間到標志
  96. }
復制代碼


03實驗三 定時器.zip

20.82 KB, 下載次數: 3, 下載積分: 黑幣 -5

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

相關帖子

回復

使用道具 舉報

沙發
ID:259398 發表于 2017-12-11 20:11 | 只看該作者
很不錯,解決了我的難題
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品福利网站 | www.一区二区三区.com | 欧美群妇大交群中文字幕 | 国产精品久久久久久久久免费桃花 | 爱爱小视频 | 日本中出视频 | 欧美偷偷操 | 国产91网站在线观看 | 高清亚洲 | 欧美a在线| 国产精品久久久久久婷婷天堂 | 日韩欧美在线播放 | 麻豆一区二区三区精品视频 | 国产欧美精品一区二区 | 久久久久国产一区二区三区四区 | 亚洲精品成人av久久 | 亚洲精品一区二区三区四区高清 | 国产黄色在线观看 | 久久亚洲精品久久国产一区二区 | av在线免费观看网站 | 成人欧美一区二区三区 | 第一福利社区1024 | 日本久久视频 | 亚洲高清中文字幕 | 一区二区在线 | 精品国产91亚洲一区二区三区www | 一级全黄视频 | 精品乱码一区二区三四区视频 | 丝袜 亚洲 另类 欧美 综合 | 中文字幕免费视频 | 免费久久网站 | av免费网站在线观看 | 亚洲 欧美 综合 | 日本亚洲精品 | 91精品国产综合久久国产大片 | 色综合区 | 国产成人免费视频网站高清观看视频 | 欧美一级二级三级视频 | www狠狠干| 国产精品久久久久久久久大全 | 国外成人在线视频网站 |