找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1817|回复: 0
打印 上一主题 下一主题
收起左侧

单片机LED流星雨源码

[复制链接]
跳转到指定楼层
楼主
ID:268053 发表于 2018-4-30 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include<reg52.h>//
  2. #define uchar unsigned char//字符型宏定义
  3. #define uint unsigned int//整型宏定义
  4. #define shudu 3 //LED渐变速度调整
  5. uchar yin0 =31;//LED变化等级调整
  6. uchar yin1 =63;//LED变化等级调整
  7. uchar yin2 =95;//LED变化等级调整
  8. uchar yin3 =127;//LED变化等级调整
  9. uchar yin4 =159;//LED变化等级调整
  10. uchar yin5 =191;//LED变化等级调整
  11. uchar yin6 =223;//LED变化等级调整
  12. uchar yin7 =255;//LED变化等级调整
  13. sbit led0=P3^5;//16个IO口
  14. sbit led1=P3^6;
  15. sbit led2=P3^0;
  16. sbit led3=P3^1;
  17. sbit led4=P3^2;
  18. sbit led5=P3^3;
  19. sbit led6=P3^4;
  20. sbit led7=P3^7;
  21. sbit led8=P1^0;
  22. sbit led9=P1^1;
  23. sbit led10=P1^2;
  24. sbit led11=P1^7;
  25. sbit led12=P1^6;
  26. sbit led13=P1^5;
  27. sbit led14=P1^4;
  28. sbit led15=P1^3;
  29. uchar d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15;//各IO口变量

  30. /***************************************************/
  31. /**********************延时子程序*******************/
  32. /***************************************************/
  33. void delay(uint z)
  34. {
  35. uint x,y;//局部变量定义
  36. for(x=0;x<5;x++)//延时外循环
  37. for(y=0;y<z;y++);//延时内循环
  38. }
  39. /**********************************************/
  40. /**********PWM控制红绿蓝3种灯亮灭时间*********/
  41. /**********************************************/
  42. void RGBpwm(uchar d0,uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6,uchar d7,uchar d8,uchar d9,uchar d10,uchar d11,uchar d12,uchar d13,uchar d14,uchar d15)//3个局部变量,且部分为带参数函数
  43. {
  44. if(d0!=0)
  45. {
  46. led0=0;
  47. delay(d0);                    
  48. led0=1;//1
  49. }
  50. if(d1!=0)
  51. {
  52. led1=0;
  53. delay(d1);                    
  54. led1=1;//1
  55. }
  56. if(d2!=0)
  57. {
  58. led2=0;
  59. delay(d2); //2                  
  60. led2=1;
  61. }
  62. if(d3!=0)
  63. {
  64. led3=0;
  65. delay(d3);                    
  66. led3=1;//3
  67. }
  68. if(d4!=0)
  69. {
  70. led4=0;
  71. delay(d4);                    
  72. led4=1;//4
  73. }
  74. if(d5!=0)
  75. {
  76. led5=0;
  77. delay(d5);                    
  78. led5=1;//5
  79. }
  80. if(d6!=0)
  81. {
  82. led6=0;
  83. delay(d6);                    
  84. led6=1;//6
  85. }
  86. if(d7!=0)
  87. {
  88. led7=0;
  89. delay(d7);                    
  90. led7=1;//7
  91. }
  92. if(d8!=0)
  93. {
  94. led8=0;
  95. delay(d8);                    
  96. led8=1;//8
  97. }
  98. if(d9!=0)
  99. {
  100. led9=0;
  101. delay(d9);                    
  102. led9=1;//9
  103. }
  104. if(d10!=0)
  105. {
  106. led10=0;
  107. delay(d10); //10                  
  108. led10=1;
  109. }
  110. if(d11!=0)
  111. {
  112. led11=0;
  113. delay(d11);                    
  114. led11=1;//11
  115. }
  116. if(d12!=0)
  117. {
  118. led12=0;
  119. delay(d12);                    
  120. led12=1;//12
  121. }
  122. if(d13!=0)
  123. {
  124. led13=0;
  125. delay(d13); //13                  
  126. led13=1;
  127. }
  128. if(d14!=0)//14
  129. {
  130. led14=0;
  131. delay(d14);                    
  132. led14=1;
  133. }
  134. if(d15!=0)//15
  135. {
  136. led15=0;
  137. delay(d15);                    
  138. led15=1;
  139. }
  140. }
  141.   
  142. /***********************************************/
  143. /********************主程序*********************/
  144. /***********************************************/
  145. void main()
  146. {
  147. TMOD=0x01;
  148. EA=1;
  149. ET0=1;
  150. TR0=1;
  151. TH0=(65536-56)/256;
  152. TL0=(65536-56)%256;
  153. while(1)//程序主循环
  154. {
  155.   RGBpwm(d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15);//调用RGBpwm子程序
  156. }
  157. }
  158. /*************************************************/
  159. /*中断服务程序(控制LED红绿蓝亮灭时间占空比)*/
  160. /*************************************************/
  161. void zhong() interrupt 1//中断向量位为1
  162. {
  163. uint num;//定时计数器变量
  164. uint ji;//亮度等级控制变量
  165. TH0=(65536-500)/256;//给定时器高8位赋值
  166. TL0=(65536-500)%256;//给定时器低8位赋值
  167. num++;//将定时器计数变量自动加1
  168. if(num==shudu)//如果速度变量等于定时计数变量就不执行下面大括号语句
  169. {
  170.   num=0;//将计数器清0
  171.   ji++;//将亮度等级控制变量加1  if((ji>0)&&(ji<10))//移位移动流水.....
  172.   {
  173. d0=yin7;
  174. d1=0;
  175. d2=0;
  176. d3=0;
  177. d4=0;  d5=0;
  178. d6=0;
  179. d7=0;
  180. d8=0;  d9=0;
  181. d10=0;
  182. d11=0;
  183. d12=0;  d13=0;
  184. d14=0;
  185. d15=0;
  186.   }
  187.   if((ji>10)&&(ji<20))//23456789
  188.   {
  189. d0=yin6;
  190. d1=yin7;
  191. d2=0;
  192. d3=0;
  193. d4=0;  d5=0;
  194. d6=0;
  195. d7=0;
  196. d8=0;  d9=0;
  197. d10=0;
  198. d11=0;
  199. d12=0;  d13=0;
  200. d14=0;
  201. d15=0;
  202.   }
  203. if((ji>20)&&(ji<30))//345678910
  204.   {
  205. d0=yin5;
  206. d1=yin6;
  207. d2=yin7;
  208. d3=0;
  209. d4=0;  d5=0;
  210. d6=0;
  211. d7=0;
  212. d8=0;  d9=0;
  213. d10=0;
  214. d11=0;
  215. d12=0;  d13=0;
  216. d14=0;
  217. d15=0;
  218.   }  if((ji>30)&&(ji<40))//4567891011
  219.   {
  220. d0=yin4;
  221. d1=yin5;
  222. d2=yin6;
  223. d3=yin7;
  224. d4=0;
  225. d5=0;
  226. d6=0;
  227. d7=0;
  228. d8=0;  d9=0;
  229. d10=0;
  230. d11=0;
  231. d12=0;  d13=0;
  232. d14=0;
  233. d15=0;
  234.   }       if((ji>40)&&(ji<50))//12345678
  235.   {
  236. d0=yin3;
  237. d1=yin4;
  238. d2=yin5;
  239. d3=yin6;  d4=yin7;
  240. d5=0;
  241. d6=0;
  242. d7=0;
  243. d8=0;  d9=0;
  244. d10=0;
  245. d11=0;
  246. d12=0;  d13=0;
  247. d14=0;
  248. d15=0;
  249.   }
  250.   if((ji>50)&&(ji<60))//23456789
  251.   {
  252. d0=yin2;
  253. d1=yin3;
  254. d2=yin4;
  255. d3=yin5;  d4=yin6;
  256. d5=yin7;
  257. d6=0;
  258. d7=0;
  259. d8=0;  d9=0;
  260. d10=0;
  261. d11=0;
  262. d12=0;  d13=0;
  263. d14=0;
  264. d15=0;
  265.   }
  266. if((ji>60)&&(ji<70))//345678910
  267.   {
  268. d0=yin1;
  269. d1=yin2;
  270. d2=yin3;
  271. d3=yin4;  d4=yin5;
  272. d5=yin6;
  273. d6=yin7;
  274. d7=0;
  275. d8=0;  d9=0;
  276. d10=0;
  277. d11=0;
  278. d12=0;  d13=0;
  279. d14=0;
  280. d15=0;
  281.   }  if((ji>70)&&(ji<80))//4567891011
  282.   {
  283. d0=yin0;
  284. d1=yin1;
  285. d2=yin2;
  286. d3=yin3;  d4=yin4;
  287. d5=yin5;
  288. d6=yin6;
  289. d7=yin7;
  290. d8=0;
  291. d9=0;
  292. d10=0;
  293. d11=0;
  294. d12=0;  d13=0;
  295. d14=0;
  296. d15=0;
  297.   }     
  298.   if((ji>80)&&(ji<90))//12345678
  299.   {
  300. d0=0;
  301. d1=yin0;
  302. d2=yin1;
  303. d3=yin2;  d4=yin3;
  304. d5=yin4;
  305. d6=yin5;
  306. d7=yin6;  d8=yin7;
  307. d9=0;
  308. d10=0;
  309. d11=0;
  310. d12=0;  d13=0;
  311. d14=0;
  312. d15=0;
  313.   }

  314. if((ji>90)&&(ji<100))//345678910
  315.   {
  316. d2=yin0;
  317. d3=yin1;
  318. d4=yin2;
  319. d5=yin3;  d6=yin4;
  320. d7=yin5;
  321. d8=yin6;
  322. d9=yin7;
  323. d0=0;
  324. d1=0;
  325. d10=0;
  326. d11=0;
  327. d12=0;  d13=0;
  328. d14=0;
  329. d15=0;
  330.   }
  331. if((ji>100)&&(ji<110))//345678910
  332.   {
  333. d3=yin0;
  334. d4=yin1;
  335. d5=yin2;
  336. d6=yin3;  d7=yin4;
  337. d8=yin5;
  338. d9=yin6;
  339. d10=yin7;
  340. d0=0;
  341. d1=0;
  342. d2=0;
  343. d11=0;
  344. d12=0;  d13=0;
  345. d14=0;
  346. d15=0;
  347.   }  if((ji>110)&&(ji<120))//4567891011
  348.   {
  349. d4=yin0;
  350. d5=yin1;
  351. d6=yin2;
  352. d7=yin3;  d8=yin4;
  353. d9=yin5;
  354. d10=yin6;
  355. d11=yin7;  d1=0;
  356. d2=0;
  357. d3=0;
  358. d12=0;
  359. d0=0;
  360. d13=0;
  361. d14=0;
  362. d15=0;
  363.   }  if((ji>120)&&(ji<130))//56789101112
  364.   {
  365. d5=yin0;
  366. d6=yin1;
  367. d7=yin2;
  368. d8=yin3;  d9=yin4;
  369. d10=yin5;
  370. d11=yin6;
  371. d12=yin7;
  372. d0=0;
  373. d1=0;
  374. d2=0;
  375. d3=0;
  376. d4=0;  d13=0;
  377. d14=0;
  378. d15=0;
  379.   }  if((ji>130)&&(ji<140))//678910111213
  380.   {
  381. d6=yin0;
  382. d7=yin1;
  383. d8=yin2;
  384. d9=yin3;  d10=yin4;
  385. d11=yin5;
  386. d12=yin6;
  387. d13=yin7;
  388. d0=0;
  389. d1=0;
  390. d2=0;
  391. d3=0;
  392. d4=0;  d5=0;
  393. d14=0;
  394. d15=0;
  395.   }  if((ji>140)&&(ji<150))//
  396.   {
  397. d7=yin0;
  398. d8=yin1;
  399. d9=yin2;
  400. d10=yin3;  d11=yin4;
  401. d12=yin5;
  402. d13=yin6;
  403. d14=yin7;
  404. d0=0;
  405. d1=0;
  406. d2=0;
  407. d3=0;
  408. d4=0;  d5=0;
  409. d6=0;
  410. d15=0;
  411.   }  if((ji>150)&&(ji<160))//
  412.   {
  413. d8=yin0;
  414. d9=yin1;
  415. d10=yin2;
  416. d11=yin3;  d12=yin4;
  417. d13=yin5;
  418. d14=yin6;
  419. d15=yin7;

  420. d0=0;
  421. d1=0;
  422. d2=0;
  423. d3=0;
  424. d4=0;  d5=0;
  425. d6=0;
  426. d7=0;
  427.   }   if((ji>160)&&(ji<450))//让所有LED都灭掉 等待下一次流星......
  428.   {
  429. d0=0;
  430. d1=0;
  431. d2=0;
  432. d3=0;
  433. d4=0;  d5=0;
  434. d6=0;
  435. d7=0;
  436. d8=0;  d9=0;
  437. d10=0;
  438. d11=0;
  439. d12=0;  d13=0;
  440. d14=0;
  441. d15=0;
  442.   }
  443.   if(ji>450)
  444. {
  445. TR0=0;
  446. ji=0;
  447. TR0=1;
  448. }
  449. }
  450. }
复制代码

所有资料51hei提供下载:
流星雨.rar (33.64 KB, 下载次数: 17)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表