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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機呼吸燈 霹靂游俠摩托車尾燈 仿真+程序代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:63472 發表于 2014-7-1 10:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
摩托車尾燈

  1. /*實例:
  2. 實例中部分與上述講解有所不同
  3. 因為實際中我們控制的是16個燈,而在上述講解中只是控制8個燈,所以實例中有所不同
  4. 由于單片機速度限制,我最后將一個周期設定為循環50次。
  5. 所以當數組中存50既代表全亮。*/
  6. //預處理
  7. #include <reg52.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. //全局變量設定
  11. uchar dismem[16];
  12. uchar code tab[16]={0,1,2,3,4,5,6,7,8,9,11,13,16,22,35,50};
  13. uchar code ann[]={1,1,1,1,1,1,1,1,2,3,6,10,14,20,35,50,35,20,14,10,6,3,2,1,1,1,1,1,1,1,1,1};
  14. uchar code ann2[]={0,0,0,0,0,0,0,0,1,2,6,14,35,50,35,14,6,2,1,1,1,0,0,0,0,0,0,0,0};
  15. //延時函數
  16. void delay(uint i)
  17. {
  18. while(i--);
  19. }
  20. //取絕對值函數
  21. char abs(char i)
  22. {
  23. if (i<0)
  24. i=-i;
  25. return i;
  26. }
  27. //定時器設置函數
  28. void sinter()
  29. {
  30. IE=0x82;
  31. TCON=0x01;
  32. TH0=0xc0;
  33. TL0=0xFD;
  34. TR0=0x66;
  35. }
  36. //p0口位處理函數
  37. uchar bitcountp0(uchar n)
  38. {
  39. uchar i,p=0;
  40. for (i=0;i<8;i++)
  41. {
  42. if (dismem[i]<n)
  43. p=p|(1<<i);
  44. }
  45. return p;
  46. }
  47. //p2口位處理函數
  48. //在這里需要注意的是,p2口得順序和我們led連接順序是反的。詳情可以觀察電路圖可了解到。
  49. uchar bitcountp2(uchar n)
  50. {
  51. uchar i,p=0;
  52. for (i=0;i<8;i++)
  53. {
  54. if (dismem[i+8]<n)
  55. p=p|(0x80>>i);
  56. }
  57. return p;
  58. }
  59. //清屏函數
  60. void clean(uchar n)
  61. {
  62. uchar i;
  63. for (i=0;i<16;i++)
  64. {
  65. dismem[i]=n;
  66. }
  67. }
  68. //呼吸燈函數
  69. //其中被控制燈在第a個和第b個之間。speed是呼吸速度。
  70. void roll10(uchar a,uchar b,uint speed)
  71. {
  72. uchar i,j;
  73. for (i=1;i<30;i++)
  74. {
  75. for (j=a;j<b;j++)

  76. {
  77. dismem[j]=i;
  78. }
  79. delay (speed);
  80. }
  81. for(i=30;i>0;i--)
  82. {
  83. for (j=a;j<b;j++)
  84. {
  85. dismem[j]=i-1;
  86. }
  87. delay (speed);
  88. }
  89. }
  90. //動畫區域

  91. void flash_1()        ///////////////////////////////////////////
  92. {
  93. uchar i,j,mem[32]={0,0,0,0,0,0,0,0x00,0,0,0,0,0,0,0,0x01,15,13,11,9,7,5,3,0x02,1,1,1,1,1,1,1,1};
  94. for (i=0;i<36;i++)
  95. {
  96. for (j=0;j<16;j++)
  97. {
  98. dismem[j]=tab[mem[j]];
  99. }
  100. for (j=0;j<31;j++)
  101. {
  102. mem[j]=mem[j+1];
  103. }
  104. mem[31]=1;
  105. delay(750);
  106. }
  107. }
  108. void flash_2()                 /////////////////////////////////////////
  109. {
  110. roll10(0,16,300);
  111. roll10(0,16,300);
  112. }
  113. void flash_3()                 ////////////////////////////////////////////
  114. {
  115. uchar i,j;
  116. for (i=0;i<16;i++)
  117. {
  118. for (j=0;j<16;j++)
  119. {
  120. dismem[j]=ann[i+j];
  121. }
  122. delay(800+abs(i-8)*50);
  123. }
  124. delay(2500);
  125. for (i=16;i>0;i--)
  126. {
  127. for (j=0;j<16;j++)
  128. {
  129. dismem[j]=ann[i+j];
  130. }
  131. delay(800+abs(i-8)*50);
  132. }
  133. delay(2500);
  134. }
  135. void flash_4()                 /////////////////////////////////////////////
  136. {
  137. uchar i,j,k;
  138. for (i=0;i<16;i++)
  139. {
  140. k=(i%2)*50;
  141. for(j=0;j<8;j++)
  142. {
  143. dismem[j]=k;
  144. }
  145. k=((i+1)%2)*50;
  146. for (j=8;j<16;j++)
  147. {
  148. dismem[j]=k;
  149. }
  150. delay(3000);
  151. }
  152. for (j=0;j<8;j++)
  153. {
  154. dismem[j]=50;
  155. }
  156. for (i=50;i>0;i--)
  157. {
  158. for (j=0;j<16;j++)
  159. {
  160. dismem[j]=i-1;
  161. }
  162. delay (300);
  163. }
  164. }
  165. void flash_5()                 ////////////////////////////////////////////////
  166. {
  167. roll10(0,4,50);
  168. roll10(4,8,50);
  169. roll10(8,12,50);
  170. roll10(12,16,50);
  171. roll10(12,16,50);
  172. roll10(8,12,50);
  173. roll10(4,8,50);
  174. roll10(0,4,50);

  175. roll10(0,1,10);
  176. roll10(1,2,10);
  177. roll10(2,3,10);
  178. roll10(3,4,10);
  179. roll10(4,5,10);
  180. roll10(5,6,10);
  181. roll10(6,7,10);
  182. roll10(7,8,10);
  183. roll10(8,9,10);
  184. roll10(9,10,10);
  185. roll10(10,11,10);
  186. roll10(11,12,10);
  187. roll10(12,13,10);
  188. roll10(13,14,10);
  189. roll10(14,15,10);
  190. roll10(15,16,10);

  191. roll10(15,16,10);
  192. roll10(14,16,10);
  193. roll10(13,16,10);
  194. roll10(12,16,10);
  195. roll10(11,16,10);
  196. roll10(10,16,10);
  197. roll10(9,16,10);
  198. roll10(8,16,10);
  199. roll10(7,16,10);
  200. roll10(6,16,10);
  201. roll10(5,16,10);
  202. roll10(4,16,10);
  203. roll10(3,16,10);
  204. roll10(2,16,10);
  205. roll10(1,16,10);
  206. roll10(0,16,10);
  207. roll10(0,16,10);

  208. roll10(15,16,10);
  209. roll10(14,15,10);
  210. roll10(13,14,10);
  211. roll10(12,13,10);
  212. roll10(11,12,10);
  213. roll10(10,11,10);
  214. roll10(9,10,10);
  215. roll10(8,9,10);
  216. roll10(7,8,10);
  217. roll10(6,7,10);
  218. roll10(5,6,10);
  219. roll10(4,5,10);
  220. roll10(3,4,10);
  221. roll10(2,3,10);
  222. roll10(1,2,10);
  223. roll10(0,1,10);

  224. roll10(0,16,10);
  225. roll10(1,16,10);
  226. roll10(2,16,10);
  227. roll10(3,16,10);
  228. roll10(4,16,10);
  229. roll10(5,16,10);
  230. roll10(6,16,10);
  231. roll10(7,16,10);
  232. roll10(8,16,10);
  233. roll10(9,16,10);       
  234. roll10(10,16,10);
  235. roll10(11,16,10);
  236. roll10(12,16,10);
  237. roll10(13,16,10);
  238. roll10(14,16,10);
  239. roll10(15,16,10);

  240. }
  241. void flash_6_1(uint speed)          /////////////////////////////////////////
  242. {
  243. uchar i,j;
  244. for (i=1;i<50;i++)
  245. {
  246. for (j=0;j<16;j+=2)
  247. {
  248. dismem[j]=i;
  249. }
  250. for (j=1;j<16;j+=2)
  251. {
  252. dismem[j]=49-i;
  253. }
  254. delay (speed);
  255. }
  256. for (i=49;i>0;i--)
  257. {
  258. for (j=0;j<16;j+=2)
  259. {
  260. dismem[j]=i;
  261. }
  262. for (j=1;j<16;j+=2)
  263. {
  264. dismem[j]=49-i;
  265. }
  266. delay (speed);
  267. }
  268. }
  269. void flash_6_2(uint speed)          /////////////////////////////////////////
  270. {
  271. uchar i,j;
  272. for (i=1;i<50;i++)
  273. {
  274. for (j=0;j<4;j++)
  275. {
  276. dismem[j]=i;
  277. dismem[j+8]=i;
  278. }
  279. for (j=4;j<8;j++)
  280. {
  281. dismem[j]=49-i;
  282. dismem[j+8]=49-i;
  283. }
  284. delay (speed);
  285. }
  286. for (i=49;i>0;i--)
  287. {
  288. for (j=0;j<4;j++)
  289. {
  290. dismem[j]=i;
  291. dismem[j+8]=i;
  292. }
  293. for (j=4;j<8;j++)
  294. {
  295. dismem[j]=49-i;
  296. dismem[j+8]=49-i;
  297. }
  298. delay (speed);
  299. }
  300. }
  301. void flash_6()                                  //////////////////////////////////////////////
  302. {
  303. uchar i,j;
  304. for (i=1;i<50;i++)
  305. {
  306. for (j=1;j<16;j+=2)
  307. {
  308. dismem[j]=i;
  309. }
  310. delay (100);
  311. }
  312. flash_6_1(100);
  313. flash_6_1(100);
  314. flash_6_1(100);
  315. flash_6_1(100);
  316. for (i=49;i>0;i--)
  317. {
  318. for (j=1;j<16;j+=2)
  319. {
  320. dismem[j]=i;
  321. }
  322. delay (100);
  323. }
  324. for (i=1;i<50;i++)
  325. {
  326. for (j=4;j<8;j++)
  327. {
  328. dismem[j]=i;
  329. dismem[j+8]=i;
  330. }
  331. delay (100);
  332. }
  333. flash_6_2(100);
  334. flash_6_2(100);
  335. flash_6_2(100);
  336. for (i=49;i>0;i--)
  337. {
  338. for (j=4;j<8;j++)
  339. {
  340. dismem[j]=i;
  341. dismem[j+8]=i;
  342. }
  343. delay (100);
  344. }
  345. }
  346. void flash_7()                                  //////////////////////////////////////////////
  347. {
  348. uchar i,j,k;
  349. for (i=0;i<15;i++)
  350. {
  351. k=(i%2)*50;
  352. for (j=0;j<8;j++)
  353. {
  354. dismem[j]=k;
  355. }
  356. delay(1500);
  357. }
  358. for (i=0;i<15;i++)
  359. {
  360. k=(i%2)*50;
  361. for (j=8;j<16;j++)
  362. {
  363. dismem[j]=k;
  364. }
  365. delay(1500);
  366. }
  367. }
  368. void flash_8()                                ////////////////////////////////////////////////
  369. {
  370. uchar i,j;
  371. for (i=0;i<22;i++)
  372. {
  373. for (j=0;j<8;j++)
  374. {
  375. dismem[j]=ann2[i+j];
  376. dismem[15-j]=ann2[i+j];
  377. }
  378. delay(1500);
  379. }
  380. }
  381. void flash_9_l()                 /////////////////////////////////////////////////////////
  382. {
  383. uchar i,j;
  384. for (i=0;i<4;i++)
  385. dismem[i]=50;
  386. for (i=4;i<8;i++)
  387. dismem[i]=1;
  388. for (i=0;i<12;i++)
  389. {
  390. for (j=15;j>4;j--)
  391. dismem[j]=dismem[j-1];
  392. dismem[4]=0;
  393. delay(1000);
  394. }
  395. }
  396. void flash_9_r()                //////////////////////////////////////////////////
  397. {
  398. uchar i,j;
  399. for (i=12;i<16;i++)
  400. dismem[i]=50;
  401. for (i=8;i<12;i++)
  402. dismem[i]=1;
  403. for (i=0;i<12;i++)
  404. {
  405. for (j=0;j<11;j++)
  406. dismem[j]=dismem[j+1];
  407. dismem[11]=0;
  408. delay(1000);
  409. }
  410. }
  411. void flash_9()                        //////////////////////////////////////////////////////
  412. {
  413. flash_9_l();
  414. flash_9_r();
  415. flash_9_l();
  416. flash_9_r();
  417. flash_9_l();
  418. flash_9_r();

  419. }
  420. //主函數
  421. //主函數調用動畫區域的函數,這里可以理解一個播放列表。
  422. void main()
  423. {
  424. sinter();
  425. clean(0);
  426. //play list;
  427. while(1)
  428. {
  429. flash_1();
  430. flash_2();
  431. flash_3();
  432. flash_4();
  433. flash_2();
  434. flash_5();
  435. flash_6();
  436. flash_7();
  437. flash_7();
  438. flash_9();
  439. flash_8();
  440. flash_8();
  441. flash_2();
  442. flash_6();
  443. flash_9();
  444. flash_3();
  445. flash_1();
  446. flash_8();
  447. flash_8();
  448. flash_6();
  449. flash_5();
  450. flash_4();

  451. }
  452. }
  453. //中斷服務函數
  454. void print() interrupt 1
  455. {
  456. static uchar i=1;
  457. P0=bitcountp0(i);
  458. P2=bitcountp2(i);
  459. if (i<50)
  460. i++;
  461. else
  462. i=1;
  463. TH0=0xFd;
  464. TL0=0x66;
  465. }
復制代碼


霹靂游俠燈.rar

620.85 KB, 下載次數: 164, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:44262 發表于 2014-7-17 16:55 來自手機 | 只看該作者
很牛的作品
回復

使用道具 舉報

板凳
ID:68630 發表于 2014-11-10 20:25 | 只看該作者
真的是么
回復

使用道具 舉報

地板
ID:68630 發表于 2014-11-10 20:25 | 只看該作者
弄下來看看就知道咋樣了
回復

使用道具 舉報

5#
ID:104289 發表于 2016-1-24 14:34 | 只看該作者
很強。。。。。。。。。。。。
回復

使用道具 舉報

6#
ID:168949 發表于 2017-3-7 20:49 | 只看該作者
電路不一樣,程序也不一樣對嗎
回復

使用道具 舉報

7#
ID:169063 發表于 2017-3-8 11:20 | 只看該作者
學習借鑒了,謝謝樓主
回復

使用道具 舉報

8#
ID:653749 發表于 2019-12-1 20:28 | 只看該作者
樓主怎么不對, 能給我對的嗎,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区国产 | 国产激情福利 | 国产精品1区2区3区 一区中文字幕 | 精品在线观看入口 | 日韩欧美操 | 国产a区| 中文一区二区 | 亚洲精品免费在线 | 91影院在线观看 | 亚洲性爰 | 91.色| 九色网址 | 中文字幕在线国产 | 日本成人久久 | 久久国产精品一区二区三区 | 欧美日韩a| 亚洲视频一区二区三区四区 | 成人午夜影院 | 成人免费在线观看 | 国产精品美女久久久 | 亚洲国产精品一区二区三区 | 91在线观看免费视频 | 久久国产成人 | www.亚洲一区 | 亚洲一区二区三区福利 | 男女羞羞视频大全 | 91精品国产91久久久久久最新 | 国产ts一区| 精品乱码一区二区三四区 | 91精品国产综合久久国产大片 | 一本一道久久a久久精品蜜桃 | 黄色在线免费播放 | 国产成人在线视频免费观看 | 欧美综合在线视频 | 99视频入口| 亚洲欧美自拍偷拍视频 | 国产高清在线精品 | 小h片免费观看久久久久 | 在线成人免费观看 | 91麻豆精品国产91久久久久久久久 | 国产一级一级国产 |