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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的七彩呼吸燈protues仿真+程序keil5

[復制鏈接]
跳轉到指定樓層
樓主
(1) 起始狀態時,8個燈處于同頻率呼吸狀態。
(2) 按鍵1按下時,1號到8號依次由亮到暗呼吸
(3) 按鍵2按下時,1號到8號依次由暗到亮呼吸
4)按鍵3按下時,恢復起始亮法。
由于是在仿真中,需要加入驅動電路才能看出來“呼吸”的效果,否則只能看到燈在閃爍。
做實物時不需要加驅動電路,直接連接單片機就可以看出來那種效果。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>
  2. #define MAX 0x40   //定時上限定義
  3. #define MIN 0x00   //定時下限定義
  4. #define TIMELINE 10         //時間分頻常數
  5. #define TRUE  1
  6. #define FALSE 0             //標志位常數
  7. sbit s1 = P2^0;
  8. sbit s2 = P2^1;
  9. sbit s3 = P2^2;
  10. unsigned int TimeCounter;
  11. bit ArrowFlg = 0;         //方向標志位
  12. unsigned char upCounter,downCounter;    //增加計數器和減少計數器
  13. unsigned char table1[] = {0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff} ;
  14. unsigned char table2[] = {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00} ;
  15. unsigned char k=0,j=-1;
  16. char key1,key=3;
  17. char keyscan()
  18. {
  19.         if(s1==0){while(!s1);key=1;}
  20.         if(s2==0){while(!s2);key=2;}
  21.         if(s3==0){while(!s3);key=3;}
  22.         return key;
  23. }
  24. //T0的中斷服務子函數
  25. void T0Deal() interrupt 1
  26. {
  27.         TH0=0xf1;
  28.         TL0=0xf1;
  29.         TR0=1;
  30.         TimeCounter++;  //定時計數器增加
  31.         if(TimeCounter == TIMELINE)
  32.         {
  33.                 if(key1==1)
  34.                 {
  35.                   upCounter++;
  36.             downCounter--;
  37.                   if((upCounter == MAX)&&(downCounter == MIN))
  38.                   {
  39.                            upCounter = MIN;
  40.                                 downCounter = MAX;     //計數器初始化
  41.                                 k++;if(k>=9)k=0;
  42.                   }
  43.                 }
  44.                 if(key1==2)
  45.                 {
  46.                   upCounter--;
  47.             downCounter++;
  48.                   if((upCounter == MIN)&&(downCounter == MAX))
  49.                   {
  50.                            upCounter = MAX;
  51.                                 downCounter = MIN;     //計數器初始化
  52.                                 j++;if(j>=9)j=0;
  53.                   }
  54.                 }
  55.                 if(key==3)
  56.                 {
  57.                         if((upCounter == MAX)&&(downCounter == MIN))  //計數方向標志位切換
  58.                     {
  59.                       ArrowFlg = FALSE;
  60.                     }
  61.                         if((upCounter == MIN)&&(downCounter == MAX))
  62.                     {
  63.                       ArrowFlg= TRUE;
  64.                     }
  65.                         if(ArrowFlg == 1)   //如果是增加計數
  66.                     {
  67.                       upCounter++;
  68.                       downCounter--;
  69.                     }
  70.                                 else               //如果是減少計數
  71.                     {
  72.                       upCounter--;
  73.                       downCounter++;
  74.                     }
  75.                 }
  76.                         TimeCounter=0;
  77.         }
  78. }
  79. //延時函數
  80. void Delay(unsigned int i)
  81. {
  82.         unsigned int j;
  83.         while(i--)
  84.         {
  85.                 for(j=0;j<32;j++);     //延時
  86.         }
  87. }
  88. void main()
  89. {
  90.         upCounter = MIN;
  91.         downCounter = MAX;     //計數器初始化
  92.         TMOD = 0x01;          //設置定時器工作方式1
  93.         TH0 = 0xF0;
  94.         TL0 = 0xF0;          //T0初始化值
  95.         EA = 1;
  96.         ET0 = 1;              //開中斷
  97.         TR0 = 1;              //啟動T0
  98.         while(1)
  99.         {
  100.           key1=keyscan();
  101.           if(key1==1){P1= table1[k-1];Delay(downCounter);P1=table1[k];   Delay(upCounter);}
  102.           if(key1==2){P1=table2[j];   Delay(downCounter);P1=table2[j-1]; Delay(upCounter); }
  103.           if(key1==3){P1=0x00;        Delay(downCounter);P1=0xff;        Delay(upCounter);}
  104.         }
  105. }
復制代碼

所有資料51hei提供下載:
七彩呼吸燈.zip (118.5 KB, 下載次數: 127)

評分

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

查看全部評分

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

使用道具 舉報

來自 2#
ID:262 發表于 2023-4-10 05:07 | 只看該作者
PPHH 發表于 2023-4-9 20:47
我也是,請問一下,你有解決嗎

用Proteus8.13版本打開可以 你看我打開的效果

51hei.gif (187.08 KB, 下載次數: 82)

51hei.gif
回復

使用道具 舉報

板凳
ID:863362 發表于 2021-11-6 08:11 | 只看該作者
無論哪個按鍵,LED都不亮
回復

使用道具 舉報

地板
ID:34149 發表于 2021-11-7 20:39 | 只看該作者
可以達到預期效果。謝謝分享
回復

使用道具 舉報

5#
ID:944517 發表于 2021-11-8 08:44 | 只看該作者
樓主可以發表下所用的器件嗎各種

回復

使用道具 舉報

6#
ID:1070704 發表于 2023-4-9 20:47 | 只看該作者
sonique0371 發表于 2021-11-6 08:11
無論哪個按鍵,LED都不亮

我也是,請問一下,你有解決嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久专区 | 噜噜噜色网 | 日韩三级 | 久久精品亚洲精品国产欧美 | 日韩欧美中文字幕在线观看 | 国产欧美精品一区二区 | 久久久久亚洲 | 免费观看av | 日韩三级在线 | 欧美一级电影免费 | 国产精品久久久久久久久久久免费看 | 精品一区视频 | 亚洲视频在线一区 | www.青青草 | 精品久久久久久久久久久院品网 | 国产精品伦一区二区三级视频 | 久久久亚洲精品视频 | www.夜夜骑 | 久久久精彩视频 | 综合色婷婷 | 午夜国产一级 | 秋霞精品 | 成人免费毛片片v | 亚洲人成人一区二区在线观看 | 2021狠狠天天天| 国产乱码精品一区二区三区中文 | 精品视频国产 | 亚洲欧美一区二区三区国产精品 | 久久久久久久久久久爱 | 91九色porny首页最多播放 | 欧美日韩精品区 | 久久久91精品国产一区二区精品 | av一级毛片 | 国产精品久久久99 | 九九在线精品视频 | 日韩爱爱网 | 中文字幕在线观看国产 | 精品中文字幕视频 | 成人午夜精品 | 免费成人毛片 | 亚洲一区二区精品视频 |