找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机花样流水灯程序

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include "reg51.h"
  2.                                                                                                                                                                         
  3. #define uchar unsigned char         //定义unsigned char 为 uchar
  4. #define uint  unsigned int

  5. sbit  F1 = P3^0;
  6. sbit  F2 = P3^1;

  7. uint  time =90;        //通过改变TIME的参数可以改变流水灯的变换速度                  


  8. /***************一微秒延时子程序******************/
  9. void delayus(uint delay){
  10.         while(delay--);
  11. }

  12. /***************一毫秒延时子程序******************/

  13. void delayms(uint delay){
  14.         while(delay--)
  15.                 delayus(300);
  16. }


  17. /*******************************变换方式一  子函数 ***********************************/

  18. void run_LED_fun1()
  19. {
  20. uchar a,temp,temp1;
  21. temp=0x10;

  22. for(a=9;a>0;a--)   //P1口LED灯依次点亮
  23. {
  24. P1=~temp;

  25. delayms(time);
  26. temp<<=1;

  27. }

  28. temp=0x01;
  29. for(a=9;a>0;a--)   //P3口LED灯依次点亮
  30. {
  31. P3=~temp;

  32. delayms(time);
  33. temp<<=1;

  34. }


  35. temp=0x01;                  //P2口LED灯依次反向点亮

  36. for(a=9;a>0;a--)
  37. {
  38. P2=~temp;
  39. delayms(time);
  40. temp<<=1;

  41. }

  42. temp=0x80;                  //P0口LED灯依次反向点亮

  43. for(a=9;a>0;a--)
  44. {
  45. P0=~temp;
  46. delayms(time);
  47. temp>>=1;

  48. }




  49. temp=0x01;
  50. for(a=9;a>0;a--)   //P0口LED灯依次点亮
  51. {
  52. P0=~temp;

  53. delayms(time);
  54. temp<<=1;

  55. }

  56. temp=0x80;
  57. for(a=9;a>0;a--)   //P2口LED灯依次点亮
  58. {
  59. P2=~temp;

  60. delayms(time);
  61. temp>>=1;

  62. }



  63. temp=0x80;                  //P3口LED灯依次反向点亮

  64. for(a=9;a>0;a--)
  65. {
  66. P3=~temp;
  67. delayms(time);
  68. temp>>=1;

  69. }

  70. temp=0x80;                  //P1口LED灯依次反向点亮

  71. for(a=9;a>0;a--)
  72. {
  73. P1=~temp;
  74. delayms(time);
  75. temp>>=1;

  76. }


  77. temp=0xfe;
  78. for(a=8;a>0;a--)
  79. {
  80. P1=temp;
  81. delayms(time);
  82. temp<<=1;

  83. }


  84. temp=0xfe;
  85. for(a=8;a>0;a--)
  86. {
  87. P3=temp;
  88. delayms(time);
  89. temp<<=1;

  90. }


  91. temp=0xfe;
  92. for(a=8;a>0;a--)
  93. {
  94. P0=temp;
  95. delayms(time);
  96. temp<<=1;

  97. }


  98. temp=0x7f;
  99. for(a=8;a>0;a--)
  100. {
  101. P2=temp;
  102. delayms(time);
  103. temp>>=1;

  104. }


  105. temp=0x01;
  106. for(a=8;a>0;a--)
  107. {
  108. P2=temp;
  109. delayms(time);
  110. temp1=~temp;
  111. temp1<<=1;
  112. temp=~temp1;

  113. }

  114. temp=0x80;
  115. for(a=8;a>0;a--)
  116. {
  117. P0=temp;
  118. delayms(time);
  119. temp1=~temp;
  120. temp1>>=1;
  121. temp=~temp1;

  122. }

  123. temp=0x80;
  124. for(a=8;a>0;a--)
  125. {
  126. P3=temp;
  127. delayms(time);
  128. temp1=~temp;
  129. temp1>>=1;
  130. temp=~temp1;

  131. }
  132. temp=0x80;
  133. for(a=8;a>0;a--)
  134. {
  135. P1=temp;
  136. delayms(time);
  137. temp1=~temp;
  138. temp1>>=1;
  139. temp=~temp1;

  140. }

  141. }


  142. /*******************************变换方式二  子函数 ***********************************/


  143. void run_LED_fun2()
  144. {
  145. uchar a,temp,temp1,temp2;

  146. temp=0x01;
  147. temp1=0x80;
  148. for(a=8;a>0;a--)   //P1口LED灯依次点亮
  149. {
  150. P1=~temp;
  151. P0=~temp;
  152. P3=~temp1;
  153. P2=~temp;
  154. delayms(time);
  155. temp<<=1;
  156. temp1>>=1;

  157. }

  158. temp=0x80;
  159. temp1=0x01;
  160. for(a=8;a>0;a--)   //P1口LED灯依次点亮
  161. {
  162. P1=~temp;
  163. P0=~temp;
  164. P3=~temp1;
  165. P2=~temp;
  166. delayms(time);
  167. temp>>=1;
  168. temp1<<=1;

  169. }

  170. temp=0xfe;
  171. temp1=0x7f;
  172. for(a=8;a>0;a--)
  173. {
  174. P1=temp;
  175. P0=temp;
  176. P3=temp1;
  177. P2=temp;
  178. delayms(time);
  179. temp<<=1;
  180. temp1>>=1;

  181. }

  182. temp=0x7f;
  183. temp1=0xfe;
  184. for(a=8;a>0;a--)
  185. {
  186. P1=~temp;
  187. P0=~temp;
  188. P3=~temp1;
  189. P2=~temp;
  190. delayms(time);

  191. temp2=~temp;
  192. temp>>=1;
  193. temp2=~temp;

  194. temp1<<=1;


  195. }


  196. }


  197. /*******************************变换方式三 子函数 ***********************************/

  198. void run_LED_fun3()
  199. {

  200. P0=0x00;
  201. P1=0xff;
  202. P2=0xff;
  203. P3=0xff;
  204. delayms(5*time);

  205. P0=0xff;
  206. P1=0x00;
  207. P2=0xff;
  208. P3=0xff;
  209. delayms(5*time);

  210. P0=0xff;
  211. P1=0xff;
  212. P2=0xff;
  213. P3=0x00;
  214. delayms(5*time);

  215. P0=0xff;
  216. P1=0xff;
  217. P2=0x00;
  218. P3=0xff;
  219. delayms(5*time);

  220. P0=0xff;
  221. P1=0x00;
  222. P2=0xff;
  223. P3=0x00;
  224. delayms(5*time);

  225. P0=0x00;
  226. P1=0xff;
  227. P2=0x00;
  228. P3=0xff;
  229. delayms(5*time);
  230. P0=0xff;
  231. P1=0xff;
  232. P2=0xff;
  233. P3=0xff;

  234. }


  235. /*******************************变换方式四  子函数 ***********************************/

  236. void run_LED_fun4()
  237. {
  238. uchar a,temp,temp1,temp2;
  239. P0=0xff;
  240. P1=0x00;
  241. P2=0xff;
  242. P3=0xff;
  243. delayms(time);

  244. temp=0xfe;
  245. temp1=0xfe;

  246. for(a=8;a>0;a--)
  247. {
  248. P1=~temp;

  249. P3=temp1;

  250. delayms(time);

  251. temp2=~temp;
  252. temp<<=1;
  253. temp2=~temp;

  254. temp1<<=1;
  255. }

  256. temp=0xfe;
  257. temp1=0x7f;

  258. for(a=8;a>0;a--)
  259. {
  260. P3=~temp;

  261. P2=temp;

  262. delayms(time);

  263. temp2=~temp;
  264. temp<<=1;
  265. temp2=~temp;

  266. temp1>>=1;
  267. }

  268. temp=0xfe;
  269. temp1=0x7f;



  270. for(a=8;a>0;a--)
  271. {
  272. P2=~temp;

  273. P0=temp1;

  274. delayms(time);

  275. //temp2=~temp1;
  276. temp<<=1;
  277. //temp2=~temp;

  278. temp1>>=1;
  279. }


  280. temp=0x7f;
  281. temp1=0xfe;

  282. for(a=8;a>0;a--)
  283. {
  284. P0=~temp;

  285. P1=temp1;

  286. delayms(time);

  287. temp2=~temp;
  288. temp>>=1;
  289. temp2=~temp;

  290. temp1<<=1;
  291. }



  292. }

  293. /*
  294. void  change_speed()
  295. {
  296. if(F1 == 0)
  297. {
  298. delayms(10);
  299. if(F1 == 0)
  300. {
  301. while(!F1);
  302. time = time +20;

  303. }
  304. }


  305. if(F2 == 0)
  306. {
  307. delayms(10);
  308. if(F2 == 0)
  309. {
  310. while(!F2);
  311. time = time -20;

  312. }
  313. }



  314. }


  315. */

  316. /*******************************主函数 ***********************************/

  317. void main()
  318. {
  319. while(1)
  320. {


  321. run_LED_fun1();
  322. run_LED_fun2();
  323. run_LED_fun3();
  324. run_LED_fun4();


  325. }

  326. }
复制代码

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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