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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制的炫彩流水燈

[復制鏈接]
跳轉到指定樓層
樓主
ID:76686 發表于 2015-4-11 22:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
     這個試驗未使用到電烙鐵、萬用板、焊錫絲等,是利用一塊單片機最小系統板,然后用一塊1cm的泡沫板作的基板布置好元件,用杜邦線連接好電路。下面是試驗過程圖片及源程序。
視頻如下:









源代碼如下:
  1. #include <AT89X52.h>
  2. unsigned char RunMode;
  3. //*******************************************************
  4. void Delay1ms(unsigned int count)
  5. {
  6. unsigned int i,j;
  7. for(i=0;i<count;i++)
  8. for(j=0;j<120;j++);
  9. }
  10. unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7
  11.                               0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
  12. void Display(unsigned char Value)
  13. {
  14. P3 = LEDDisplayCode[Value];
  15. }
  16. void LEDFlash(unsigned char Count)
  17. {
  18. unsigned char i;
  19. bit Flag;
  20. for(i = 0; i<Count;i++)
  21. {
  22.   Flag = !Flag;
  23.   if(Flag)
  24.    Display(RunMode);
  25.   else
  26.    Display(0x10);
  27.   Delay1ms(100);
  28. }
  29. Display(RunMode);
  30. }
  31. unsigned char GetKey(void)
  32. {
  33. unsigned char KeyTemp,CheckValue,Key = 0x00;
  34. CheckValue = P2&0x32;
  35. if(CheckValue==0x32)
  36.   return 0x00;

  37. Delay1ms(10);
  38. KeyTemp = P2&0x32;
  39. if(KeyTemp==CheckValue)
  40.   return 0x00;
  41. if(!(CheckValue&0x02))
  42.   Key|=0x01;
  43. if(!(CheckValue&0x10))
  44.   Key|=0x02;
  45. if(!(CheckValue&0x20))
  46.   Key|=0x04;
  47. return Key;
  48. }
  49. unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
  50. void InitialTimer2(void)
  51. {
  52. T2CON  = 0x00;   //16 Bit Auto-Reload Mode
  53.   TH2 = RCAP2H = 0xFC;   //重裝值,初始值 TL2 = RCAP2L = 0x18;
  54. ET2=1;     //定時器 2 中斷允許
  55. TR2 = 1;    //定時器 2 啟動
  56. EA=1;
  57. }
  58. unsigned int code SpeedCode[]={   1,   2,   3,   5,   8,  10,  14,  17,  20,  30,
  59.             40,  50,  60,  70,  80,  90, 100, 120, 140, 160,
  60.         180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
  61. void SetSpeed(unsigned char Speed)
  62. {
  63. SystemSpeed =SpeedCode[Speed];
  64. }
  65. void LEDShow(unsigned int LEDStatus)
  66. {
  67. P1 = ~(LEDStatus&0x00FF);
  68. P0 = ~((LEDStatus>>8)&0x00FF);
  69. }
  70. void InitialCPU(void)
  71. {
  72. RunMode = 0x00;
  73. TimerCount = 0;
  74. SystemSpeedIndex = 10;
  75. P1 = 0x00;
  76. P0 = 0x00;
  77. P2 = 0xFF;
  78. P3 = 0x00;
  79. Delay1ms(500);
  80. P1 = 0xFF;
  81. P0 = 0xFF;
  82. P2 = 0xFF;
  83. P3 = 0xFF;
  84. SetSpeed(SystemSpeedIndex);
  85. Display(RunMode);
  86. }
  87. //Mode 0
  88. unsigned int LEDIndex = 0;
  89. bit LEDDirection = 1,LEDFlag = 1;
  90. void Mode_0(void)
  91. {
  92. LEDShow(0x0001<<LEDIndex);
  93. LEDIndex = (LEDIndex+1)%16;

  94. }
  95. //Mode 1
  96. void Mode_1(void)
  97. {
  98. LEDShow(0x8000>>LEDIndex);
  99. LEDIndex = (LEDIndex+1)%16;
  100. }
  101. //Mode 2
  102. void Mode_2(void)
  103. {
  104. if(LEDDirection)
  105.   LEDShow(0x0001<<LEDIndex);
  106. else
  107.   LEDShow(0x8000>>LEDIndex);
  108. if(LEDIndex==15)
  109.   LEDDirection = !LEDDirection;
  110.    LEDIndex = (LEDIndex+1)%16;
  111. }
  112. //Mode 3
  113. void Mode_3(void)
  114. {
  115. if(LEDDirection)
  116.   LEDShow(~(0x0001<<LEDIndex));
  117. else
  118.   LEDShow(~(0x8000>>LEDIndex));
  119. if(LEDIndex==15)
  120.   LEDDirection = !LEDDirection;
  121.    LEDIndex = (LEDIndex+1)%16;
  122. }
  123. //Mode 4
  124. void Mode_4(void)
  125. {
  126. if(LEDDirection)
  127. {
  128.   if(LEDFlag)
  129.    LEDShow(0xFFFE<<LEDIndex);
  130.      else
  131.    LEDShow(~(0x7FFF>>LEDIndex));
  132. }
  133. else
  134. {
  135.   if(LEDFlag)
  136.    LEDShow(0x7FFF>>LEDIndex);
  137.   else
  138.    LEDShow(~(0xFFFE<<LEDIndex));
  139. }
  140. if(LEDIndex==15)
  141. {
  142.   LEDDirection = !LEDDirection;
  143.   if(LEDDirection) LEDFlag = !LEDFlag;
  144. }
  145.     LEDIndex = (LEDIndex+1)%16;
  146. }
  147. //Mode 5
  148. void Mode_5(void)
  149. {
  150. if(LEDDirection)
  151.   LEDShow(0x000F<<LEDIndex);
  152. else
  153.   LEDShow(0xF000>>LEDIndex);
  154. if(LEDIndex==15)
  155.   LEDDirection = !LEDDirection;
  156.     LEDIndex = (LEDIndex+1)%16;
  157. }
  158. //Mode 6
  159. void Mode_6(void)
  160. {
  161. if(LEDDirection)
  162.   LEDShow(~(0x000F<<LEDIndex));
  163. else
  164.   LEDShow(~(0xF000>>LEDIndex));
  165. if(LEDIndex==15)
  166.   LEDDirection = !LEDDirection;
  167.     LEDIndex = (LEDIndex+1)%16;
  168. }
  169. //Mode 7
  170. void Mode_7(void)
  171. {
  172. if(LEDDirection)
  173.   LEDShow(0x003F<<LEDIndex);
  174. else
  175.   LEDShow(0xFC00>>LEDIndex);
  176. if(LEDIndex==9)
  177.   LEDDirection = !LEDDirection;
  178.     LEDIndex = (LEDIndex+1)%10;
  179. }
  180. //Mode 8
  181. void Mode_8(void)
  182. {
  183. LEDShow(++LEDIndex);
  184. }
  185. void TimerEventRun(void)
  186. {
  187. if(RunMode==0x00)
  188. {
  189.   Mode_0();
  190. }
  191. else if(RunMode ==0x01)
  192. {
  193.   Mode_1();
  194. }
  195. else if(RunMode ==0x02)
  196. {
  197.   Mode_2();
  198. }
  199. else if(RunMode ==0x03)
  200. {
  201.   Mode_3();
  202. }
  203. else if(RunMode ==0x04)
  204. {
  205.   Mode_4();
  206. }
  207. else if(RunMode ==0x05)
  208. {
  209.   Mode_5();
  210. }
  211. else if(RunMode ==0x06)
  212. {
  213.   Mode_6();
  214. }
  215. else if(RunMode ==0x07)
  216. {
  217.   Mode_7();
  218. }
  219. else if(RunMode ==0x08)
  220. {
  221.   Mode_8();
  222. }
  223. }
  224. void Timer2(void) interrupt 5 using 3
  225. {
  226. TF2 = 0;  //中斷標志清除( Timer2 必須軟件清標志!)
  227. if(++TimerCount>=SystemSpeed)
  228. {
  229.   TimerCount = 0;
  230.   TimerEventRun();
  231.     }
  232. }
  233. unsigned char MusicIndex = 0;
  234. void KeyDispose(unsigned char Key)
  235. {
  236. if(Key&0x01)
  237. {
  238.   LEDDirection = 1;
  239.   LEDIndex = 0;
  240.   LEDFlag = 1;
  241.   RunMode = (RunMode+1)%9;
  242.   Display(RunMode);
  243. }
  244. if(Key&0x02)
  245. {
  246.   if(SystemSpeedIndex>0)
  247.   {
  248.    --SystemSpeedIndex;
  249.    SetSpeed(SystemSpeedIndex);
  250.   }
  251.   else
  252.   {
  253.    LEDFlash(6);
  254.   }
  255. }
  256. if(Key&0x04)
  257. {
  258.   if(SystemSpeedIndex<28)
  259.   {
  260.    ++SystemSpeedIndex;
  261.    SetSpeed(SystemSpeedIndex);
  262.   }
  263.   else
  264.   {
  265.    LEDFlash(6);
  266.   }
  267. }
  268. }
  269. //***********************************************************************************
  270. main()
  271. {
  272. unsigned char Key;
  273. InitialCPU();
  274. InitialTimer2();
  275. while(1)
  276. {
  277.   Key = GetKey();
  278.   if(Key!=0x00)
  279.   {
  280.    KeyDispose(Key);
  281.   }
  282. }
  283. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲色视频 | 91精品久久久久久久久99蜜臂 | 四虎永久免费黄色影片 | 综合久久亚洲 | 亚洲国产精品一区二区久久 | 中文字幕在线播放第一页 | 国产精品一区二区三区四区 | av片网 | 亚洲一区二区在线视频 | 久久最新| 久久久久久久国产精品 | 一区二区视频在线 | 久久av一区二区三区 | 精品中文字幕一区 | 成人免费网站视频 | 网站一区二区三区 | 国产精产国品一二三产区视频 | 一区二区精品视频 | 孕妇一级毛片 | 91一区二区在线观看 | 天天草天天射 | 久久久久久久久99精品 | 巨大荫蒂视频欧美另类大 | 国产福利91精品一区二区三区 | 亚洲欧美日韩电影 | av看看 | 精品国产乱码久久久久久牛牛 | 久久久高清 | 成人精品视频在线观看 | 国产精品精品视频一区二区三区 | 国产高清在线 | 国产一区二区久久 | 日韩色视频 | 99成人免费视频 | 日韩精品在线看 | 99精品国产一区二区三区 | 欧美色综合天天久久综合精品 | av久久 | 狠狠干综合视频 | 九九久久国产 | 午夜视频在线免费观看 |