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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

經典32位單片機流水燈仿真電路+代碼

[復制鏈接]
跳轉到指定樓層
樓主
利用函數調用實現流水燈多樣控制, 很好的單片機初學實例。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:

  1. /***********************************************************************/

  2. #include "reg51.h"
  3.                                                                                                                                                                         
  4. #define uchar unsigned char         //定義unsigned char 為 uchar
  5. #define uint  unsigned int

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

  8. uint  time = 40;        //通過改變TIME的參數可以改變流水燈的變換速度                  


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

  13. /***************一毫秒延時子程序******************/

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


  18. /*******************************變換方式一  子函數 ***********************************/

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

  23. for(a=9;a>0;a--)   //P1口LED燈依次點亮
  24. {
  25. P1=~temp;

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

  28. }

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

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

  35. }


  36. temp=0x01;                  //P2口LED燈依次反向點亮

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

  42. }

  43. temp=0x80;                  //P0口LED燈依次反向點亮

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

  49. }




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

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

  56. }

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

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

  63. }



  64. temp=0x80;                  //P3口LED燈依次反向點亮

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

  70. }

  71. temp=0x80;                  //P1口LED燈依次反向點亮

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

  77. }


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

  84. }


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

  91. }


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

  98. }


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

  105. }


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

  114. }

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

  123. }

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

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

  141. }

  142. }


  143. /*******************************變換方式二  子函數 ***********************************/


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

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

  158. }

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

  170. }

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

  182. }

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

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

  195. temp1<<=1;


  196. }


  197. }


  198. /*******************************變換方式三 子函數 ***********************************/

  199. void run_LED_fun3()
  200. {

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

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

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

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

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

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

  235. }


  236. /*******************************變換方式四  子函數 ***********************************/

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

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

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

  250. P3=temp1;

  251. delayms(time);

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

  255. temp1<<=1;
  256. }

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

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

  262. P2=temp;

  263. delayms(time);

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

  267. temp1>>=1;
  268. }

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



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

  274. P0=temp1;

  275. delayms(time);

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

  279. temp1>>=1;
  280. }


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

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

  286. P1=temp1;

  287. delayms(time);

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

  291. temp1<<=1;
  292. }



  293. }

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

  304. }
  305. }


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

  313. }
  314. }



  315. }


  316. */

  317. /*******************************主函數 ***********************************/

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


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


  326. }

  327. }
復制代碼

所有資料51hei提供下載:
經典流水燈 測試程序及Proteus仿真.zip (61.92 KB, 下載次數: 76)


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

使用道具 舉報

沙發
ID:549706 發表于 2019-5-28 21:54 | 只看該作者
謝謝大佬
回復

使用道具 舉報

板凳
ID:61140 發表于 2022-6-17 06:30 | 只看該作者
呵呵,32位片機開頭寫REG51?
回復

使用道具 舉報

地板
ID:1042173 發表于 2022-8-18 02:53 來自手機 | 只看該作者
亂說32位,,我以為是sTM32的呢,,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区视频在线观看 | 在线视频日韩 | 你懂的av | 人成在线 | 91精品国产综合久久久久久丝袜 | 精精久久| 99成人| 亚洲日本免费 | 日韩一区二区三区四区五区 | 精品成人av | 在线观看中文字幕亚洲 | 亚洲乱码一区二区三区在线观看 | 久久99精品久久久 | 99热在线免费 | 久久久精品网 | 高清国产午夜精品久久久久久 | 欧洲妇女成人淫片aaa视频 | 男女免费在线观看视频 | 免费国产一区二区 | 日韩av在线一区二区三区 | 国产情侣激情 | 日韩一区二区免费视频 | 亚洲一区二区在线视频 | 久久精品国产清自在天天线 | 成人做爰999| 日韩1区 | 日韩国产一区二区三区 | 亚洲视频中文字幕 | 中文字幕国产视频 | 成人动慢 | 精品中文字幕一区二区 | 久久精品中文字幕 | 国产精品一区二区av | 91精品国产综合久久久久久 | 欧洲免费视频 | 中文字幕在线一区 | 国产网站在线免费观看 | 亚洲乱码一区二区三区在线观看 | 国产偷自视频区视频 | 91综合网| 日韩在线不卡 |