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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機四模式運行流水燈源程序

[復制鏈接]
ID:707451 發表于 2020-3-13 09:39 | 顯示全部樓層 |閱讀模式
  1. #include<reg51.h>                                    //包含頭文件
  2. #define uchar unsigned char
  3. #define uint unsigned int                    //宏定義
  4. uchar ModeNo;                        //燈閃爍的模式
  5. uint Speed;                           //閃爍的速度
  6. uchar tCount=0;             //進入定時器控制速度
  7. uchar Idx;                            //調速變量
  8. uchar mb_Count=0;
  9. bit Dirtect=1;
  10. uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  11. uint code sTable[]={0,1,3,5,7,9,15,30,50,100,200,230,280,300,350};

  12. void Delay(uint x)                                   //延時函數
  13. {
  14.         uchar i;
  15.         while (x--)
  16.         for(i=0;i<120;i++);
  17. }
  18. uchar GetKey()                                                //按鍵函數
  19. {
  20.         uchar K;
  21.         if(P2==0xFF)                                        //沒有按鍵按下
  22.         return 0;                                                //返回0
  23.         Delay(10);                                                //延時
  24.         switch(P2)                                                //有按鍵按下
  25.         {
  26.                 case 0xFE: K=1; break;                //k1按下
  27.                 case 0xFD: K=2; break;
  28.                 case 0xFB: K=3; break;
  29.                 default: K=0;                                //其他狀態,k=0
  30.         }
  31.         while(P2!=0xFF);                                //按鍵釋放
  32.         return K;                                                //返回按鍵信息
  33. }
  34. void Led_Demo(uint Led16)                        //LED狀態右移
  35. {
  36.         P1=(uchar)(Led16 & 0x00FF);
  37.         P0=(uchar)(Led16 >>8);
  38. }
  39. void T0_TNT() interrupt 1                                 //定時器工作
  40. {
  41.         if (++tCount < Speed) return;                  //對應不同的速度
  42.         tCount=0;
  43.         switch (ModeNo)
  44.         {
  45.                 case 0: Led_Demo(0x0001 << mb_Count);break;                                //模式0,最右側的燈亮,然后向左移
  46.                 case 1: Led_Demo(0x8000 >> mb_Count);break;                                   //模式1,最左側的燈亮,然后向右移
  47.                 case 2: if(Dirtect)                        Led_Demo(0x000F << mb_Count);   //模式2,四個滅燈左右移
  48.                                 else                                Led_Demo(0xF000 >> mb_Count);        
  49.                                 if(mb_Count==15)        Dirtect =!Dirtect;
  50.                 break;
  51.                 case 3: if(Dirtect)                        Led_Demo(~(0x000F << mb_Count)); //模式3,四個亮燈左右移  
  52.                                 else                                Led_Demo(~(0xF000 >> mb_Count));
  53.                                 if(mb_Count==15)        Dirtect =!Dirtect;
  54.                                 break;   
  55.                                 if(mb_Count==15)        Dirtect =!Dirtect;
  56.                                 break;
  57.         }
  58.         mb_Count=(mb_Count+1)%16;
  59. }
  60. void KeyProcess(uchar Key)                          //切換速度
  61. {
  62.         switch(Key)                                                  //按鍵按下
  63.         {
  64.                 case 1: Dirtect=1;                          //切換模式
  65.                                 mb_Count=0;
  66.                                 ModeNo=(ModeNo+1)%8;
  67.                                 P3=DSY_CODE[ModeNo];
  68.                                 break;
  69.                 case 2: if(Idx>1)                           //速度減
  70.                                 Speed=sTable[--Idx];
  71.                                 break;
  72.                 case 3: if(Idx<15)
  73.                                 Speed=sTable[++Idx];   //速度加
  74.         }
  75. }
  76. void main()                                           //主函數
  77. {
  78.         uchar Key;
  79.         P0=P1=P2=P3=0xFF;                   //IO口都復位
  80.         ModeNo=0;                                   //變量清零
  81.         Idx=4;                                           //速度默認開機4
  82.         Speed=sTable[Idx];                    //4檔速度對應的延時數
  83.         P3=DSY_CODE[ModeNo];           //P3口賦值初始狀態
  84.         IE=0x82;                                   //定義寄存器
  85.         TMOD=0x00;                                   //定時器工作狀態
  86.         TR0=1;                                           //開啟定時器0
  87.         while(1)                                   //進入while循環
  88.         {
  89.                 Key=GetKey();                    //讀取按鍵狀態
  90.                 if(Key!=0)                           //如果有按鍵按下
  91.                 KeyProcess(Key);           //根據按鍵狀態切換速度
  92.         }
  93. }
復制代碼


改過的四模式運行流水燈.zip

32.99 KB, 下載次數: 10, 下載積分: 黑幣 -5

四模式流水燈

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产91亚洲一区二区三区www | 国产精品资源在线 | 亚洲一区二区三区免费视频 | 精品国产乱码久久久久久中文 | 中国大陆高清aⅴ毛片 | 国产成人免费视频网站高清观看视频 | 嫩草一区二区三区 | 蜜桃精品视频在线 | 欧美激情综合色综合啪啪五月 | 黄色成人在线网站 | 中文字幕精品一区 | 美女视频h | 日本 欧美 三级 高清 视频 | 国产高清性xxxxxxxx | 国产成人一区二区三区 | 8x国产精品视频一区二区 | 亚洲精品国产综合区久久久久久久 | 国产一区二区三区四区三区四 | 欧美 日韩 国产 成人 在线 | 亚洲精选一区二区 | 日韩精品久久一区二区三区 | 亚洲三区视频 | 久久国产精品色av免费观看 | 国产精品久久久久久久免费大片 | 精品国产一区二区三区免费 | 天堂av在线影院 | jizz在线看片 | 天天天操 | 日韩高清三区 | 日韩欧美亚洲 | 天天精品在线 | 久色网 | 午夜精品一区二区三区在线视频 | 99精品免费在线观看 | 国产特黄一级 | 男人视频网站 | 久久国内 | 亚洲欧洲成人av每日更新 | 国产精品久久久乱弄 | www.天天操.com| 欧美成人手机在线 |