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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機RGB愛心燈Proteus仿真程序(有詳細注釋)

  [復制鏈接]
跳轉到指定樓層
樓主
RGB愛心燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下(代碼注釋很詳細):
  1. #include<reg52.h>//52頭文件
  2. #include<intrins.h>//循環左右移 函數頭文件
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit wei1=P3^4;
  6. sbit wei2=P3^5;
  7. sbit wei3=P3^6;
  8. sbit wei4=P3^7;
  9. uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//從低位往高位移一個燈
  10. uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//從高位往低位移一個燈
  11. uchar code table2[]={0xfe,0xfa,0xf8,0xf0,0xe0,0xa0,0x80,0x00};//從低位到高位逐步全部點亮
  12. uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//從高位到低位逐步全部點亮
  13. uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//從低位到高位逐步全部熄滅
  14. uchar code table5[]={0x80,0xa0,0xe0,0xf0,0xf8,0xfa,0xfe,0xff};//從高位到低位逐步全部熄滅
  15. uchar code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//從低位到高位,滅一個燈移動
  16. uchar code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//從高位到低位,滅一個燈移動
  17. uchar i;
  18. uint t;

  19. /**********************************/
  20. void delay(uint z) //延時函數
  21. {
  22.         uint x,y;
  23.         for(x=z;x>0;x--)
  24.                 for(y=314;y>0;y--);
  25. }
  26. /************************************/
  27. void delay1ms(uchar a)//延時1ms
  28. {
  29.         uchar x;
  30.         while(a--)
  31.         {
  32.           for(x=0;x<150;x++);
  33.         }        
  34. }
  35. /**********************************/
  36. void delay0ms(uint z) //延時函數
  37. {
  38.         uint x,y;
  39.         for(x=z;x>0;x--)
  40.                 for(y=10;y>0;y--);
  41. }
  42. /*************************************************
  43. //////////////////////////////////////////////////
  44. *************************************************/
  45. void deng0()//四組綠燈順時針逐步點亮
  46. {        P0=0xff;P1=0xff;
  47.         wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 P2=table3[i];
  51.                 delay(40);
  52.         }
  53.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  54.         P2=0xff;
  55. }
  56. /////////////////////////////////////////
  57. void deng0_1()//四組紅燈順時針逐步點亮
  58. {         P1=0xff;P2=0xff;
  59.         wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
  60.         for(i=0;i<8;i++)
  61.         {
  62.                 P0=table3[i];
  63.                 delay(40);
  64.         }
  65.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  66.         P0=0xff;
  67. }
  68. /////////////////////////////////////////////
  69. void deng0_2()//四組藍燈順時針逐步點亮
  70. {        P0=0xff;P2=0xff;
  71.         wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
  72.         for(i=0;i<8;i++)
  73.         {
  74.                 P1=table3[i];
  75.                 delay(40);
  76.         }
  77.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  78.         P1=0xff;
  79. }
  80.   ///////////////////////////////////////
  81. void deng1()//四組洋紅燈順時針逐步熄滅
  82. {        
  83.         
  84.         wei1=0;wei2=0;wei3=0;wei4=0;//打開所有位
  85.         P2=0xff;
  86.         for(i=0;i<8;i++)
  87.         {
  88.                 P0=table5[i];
  89.                 P1=table5[i];
  90.                 delay(40);

  91.         }
  92.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  93.         P0=0xff;P1=0xff;
  94.         
  95. }
  96. /*****************************************************************************/
  97. void deng3()//紅、黃、綠、青、藍、洋紅、白、紅,順時針流動(循環左移,即高位向低位移)
  98. {
  99.         uchar a,b,c;//綠、紅、藍
  100.         a=0x8d;
  101.         b=0x38;
  102.         c=0xe1;
  103. /////////////
  104.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  105.         P2=a;
  106.         P0=b;
  107.         P1=c;
  108.         for(i=0;i<8;i++)
  109.         {
  110.                 a=_cror_(a,1);//循環左移
  111.                 b=_cror_(b,1);//循環左移
  112.                 c=_cror_(c,1);//循環左移
  113.                 delay(100);//延時
  114.                 P2=a;
  115.                 P0=b;
  116.                 P1=c;
  117.         }
  118.         P0=0xff;P1=0xff;P2=0xff;
  119.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  120. }

  121. //////////////////////////////////////////
  122. void deng3_1()//藍燈亮的時候,四個洋紅燈轉一下
  123. {         
  124.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  125.         P1=0x00;P0=0xff;//藍燈全部亮
  126.         for(i=0;i<8;i++)
  127.         {
  128.                 P0=table1[i];
  129.                 delay(50);
  130.         }
  131.          
  132.         P0=0xff;P2=0xff;
  133.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位

  134. }
  135. ///////////////////////////////////////////////
  136. void deng3_2()//綠燈亮的時候,四個紅燈轉一下
  137. {         
  138.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  139.         P1=0xff;P2=0x00;//綠燈全部亮
  140.         for(i=0;i<8;i++)
  141.         {
  142.                 P0=table0[i];
  143.                 delay(50);
  144.         }

  145.         P0=0xff;P2=0xff;
  146.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  147. }
  148. //////////////////////////////////////////////
  149. void deng3_3()//紅燈亮的時候,四個洋紅燈轉一下
  150. {         
  151.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  152.         P0=0x00;P2=0xff;//紅燈全部亮
  153.         for(i=0;i<8;i++)
  154.         {
  155.                 P1=table1[i];
  156.                 delay(50);
  157.         }
  158.         P0=0xff;P2=0xff;
  159.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  160. }
  161. ///////////////////////////////////////////////
  162. void deng3_4()//紫燈亮的時候,四個紅燈轉一下
  163. {         
  164.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  165.         P0=0x00;P1=0x00;P0=0xff;//紫燈全部亮
  166.         for(i=0;i<8;i++)
  167.         {
  168.                 P0=table6[i];
  169.                 delay(50);
  170.         }

  171.         P0=0xff;P1=0xff;
  172.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  173. }
  174. void deng3_5()//白燈亮的時候,四個青燈轉一下
  175. {         
  176.         wei1=0;wei2=0;wei3=0;wei4=0;//打開位
  177.         P1=0x00;P0=0x00;P2=0x00;//白燈全部亮
  178.         for(i=0;i<8;i++)
  179.         {
  180.                 P0=table7[i];
  181.                 delay(50);
  182.         }

  183.         P0=0xff;P1=0xff;P2=0xff;
  184.         wei1=1;wei2=1;wei3=1;wei4=1;//關閉所有位
  185. }
  186. /************************************************************
  187. *************************************************************/
  188. void rled6_1()//紅,下面模塊的小函數
  189. {
  190.         for(i=0;i<8;i++)
  191.         {
  192.                 P0=table1[i];
  193.                 delay(25);
  194.         }
  195.         P0=0xff;
  196. }
  197. /*******************************************/
  198. void rled7_1()//綠,下面模塊的小函數
  199. {
  200.         for(i=0;i<8;i++)
  201.         {
  202.                 P2=table1[i];
  203.                 delay(25);
  204.         }
  205.         P2=0xff;
  206. }
  207. /***********************************/
  208. void rled8_1()//藍,下面模塊的小函數
  209. {
  210.         for(i=0;i<8;i++)
  211.         {
  212.                 P1=table0[i];
  213.                 delay(25);
  214.         }
  215.         P1=0xff;
  216. }

  217. /****************************************
  218. *****************************************/
  219. void deng6()//一個紅燈,順時針轉動
  220. {
  221.         wei3=1;wei2=1;wei1=1;
  222.          wei4=0;//打開左上位
  223.         rled6_1();//一個紅燈順時針轉
  224.          wei4=1;
  225. /////////////////////////////
  226.          wei3=0;//打開右上位
  227.         rled6_1();//一個紅燈順時針轉
  228.          wei3=1;
  229. /////////////////////////////
  230.         wei2=0;//打開右下位
  231.         rled6_1();//一個紅燈順時針轉
  232.         wei2=1;
  233. ////////////////////////////
  234.         wei1=0;//打開左下位
  235.         rled6_1();//一個紅燈順時針轉
  236.         wei1=1;
  237. }
  238. /************************************/
  239. void deng7()//一個綠燈,順時針轉動
  240. {
  241.          wei4=0;//打開左上位
  242.         rled7_1();//一個紅燈順時針轉
  243.          wei4=1;
  244. /////////////////////////////
  245.          wei3=0;//打開右上位
  246.         rled7_1();//一個紅燈順時針轉
  247.          wei3=1;
  248. /////////////////////////////
  249.         wei2=0;//打開右下位
  250.         rled7_1();//一個紅燈順時針轉
  251.         wei2=1;
  252. ////////////////////////////
  253.         wei1=0;//打開左下位
  254.         rled7_1();//一個紅燈順時針轉
  255.         wei1=1;
  256. }
  257. /*************************************/
  258. void deng8()//一個藍燈,順時針轉動
  259. {
  260. /////////////////////////////
  261.         wei2=0;//打開右下位
  262.         rled8_1();//一個紅燈順時針轉
  263.         wei2=1;

  264. /////////////////////////////
  265.          wei3=0;//打開右上位
  266.         rled8_1();//一個紅燈順時針轉
  267.          wei3=1;
  268. /////////////////////
  269.           wei4=0;//打開左上位
  270.         rled8_1();//一個紅燈順時針轉
  271.          wei4=1;
  272. ////////////////////////////
  273.         wei1=0;//打開左下位
  274.         rled8_1();//一個紅燈順時針轉
  275.         wei1=1;

  276. }
  277. /********************************************/
  278. void deng9()//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
  279. {
  280.         wei3=0;//打開右上位選
  281.         wei1=0;//打開左下位選


  282.          /****************/         //黃色流水(紅色全亮,綠色逐步點亮)
  283.          P1=0xff;P2=0xff;
  284.           P0=0x00;//紅色全亮
  285.         for(i=0;i<8;i++)        
  286.         {
  287.                
  288.                 P2=table3[i];
  289.                 delay(30);
  290.         }
  291.         
  292.         /****************/         //綠色流水(綠色全亮,紅色逐步熄滅)
  293.         P2=0x00;//綠色全亮
  294.         for(i=0;i<8;i++        )        
  295.         {        
  296.                 P0=table5[i];
  297.                 delay(30);
  298.         }
  299.         P0=0xff;//紅色全滅
  300.         /****************/         //青色流水(綠色全亮,藍色逐步點亮)
  301.         P2=0x00;//綠色全亮
  302.         for(i=0;i<8;i++)        
  303.         {
  304.                 P1=table3[i];
  305.                 delay(30);

  306.         }

  307.         /**************/        //藍色流水(藍色全亮,綠色逐步熄滅)
  308.         P1=0x00;//藍色全亮,
  309.         for(i=0;i<8;i++)        
  310.         {
  311.                 P2=table5[i];
  312.                 delay(30);
  313.         }
  314.         P2=0xff;//綠色滅

  315.         /**************/        //洋紅色流水(藍色全亮,紅色逐步點亮)
  316.         P1=0x00;//藍色全亮
  317.         for(i=0;i<8;i++)        
  318.         {
  319.                 P0=table3[i];
  320.                 delay(30);
  321.         }
  322.         wei3=1;
  323.         wei1=1;
  324.         //P0=0xff;P1=0xff;P2=0xff;

  325.         wei4=0;//打開右上位選
  326.         wei2=0;//打開左下位選


  327.          /****************/         //黃色流水(紅色全亮,綠色逐步點亮)
  328.          P1=0xff;P2=0xff;
  329.           P0=0x00;//紅色全亮
  330.         for(i=0;i<8;i++)        
  331.         {
  332.                
  333.                 P2=table3[i];
  334.                 delay(30);
  335.         }
  336.         
  337.         /****************/         //綠色流水(綠色全亮,紅色逐步熄滅)
  338.         P2=0x00;//綠色全亮
  339.         for(i=0;i<8;i++        )        
  340.         {        
  341.                 P0=table5[i];
  342.                 delay(30);
  343.         }
  344.         P0=0xff;//紅色全滅
  345.         /****************/         //青色流水(綠色全亮,藍色逐步點亮)
  346.         P2=0x00;//綠色全亮
  347.         for(i=0;i<8;i++)        
  348.         {
  349.                 P1=table3[i];
  350.                 delay(30);

  351.         }

  352.         /**************/        //藍色流水(藍色全亮,綠色逐步熄滅)
  353.         P1=0x00;//藍色全亮,
  354.         for(i=0;i<8;i++)        
  355.         {
  356.                 P2=table5[i];
  357.                 delay(30);
  358.         }
  359.         P2=0xff;//綠色滅

  360.         /**************/        //洋紅色流水(藍色全亮,紅色逐步點亮)
  361.         P1=0x00;//藍色全亮
  362.         for(i=0;i<8;i++)        
  363.         {
  364.                 P0=table3[i];
  365.                 delay(30);
  366.         }
  367.         wei4=1;
  368.         wei2=1;
  369.         P0=0xff;P1=0xff;P2=0xff;
  370. }
  371. /********************************************/
  372. void huxideng()//呼吸燈
  373. {
  374.         wei4=0;wei3=0;wei2=0;wei1=0;

  375.     for(i=0;i<150;i++)//紅燈緩滅,綠燈緩亮
  376.    {
  377.                    P0=0xff;
  378.                 P2=0x00;
  379.                 delay0ms(i);
  380.                 P0=0x00;
  381.                 P2=0xff;
  382.                 delay0ms(150-i);

  383.    }
  384.    P0=0xff;
  385.    for(i=0;i<150;i++)//綠燈綬滅,藍燈緩亮
  386.    {
  387.                    P2=0xff;
  388.                 P1=0x00;
  389.                 delay0ms(i);
  390.                 P2=0x00;
  391.                 P1=0xff;
  392.                 delay0ms(150-i);

  393.    }
  394.    P2=0xff;
  395.            for(i=0;i<150;i++)//藍燈緩滅,紅燈緩亮
  396.         {
  397.                 P1=0xff;
  398.                 P0=0x00;
  399.                 delay0ms(i);
  400.                 P1=0x00;
  401.                 P0=0xff;
  402.                 delay0ms(150-i);
  403.         }
  404.         P1=0xff;P2=0xff;P0=0xff;
  405.         wei4=1;wei3=1;wei2=1;wei1=1;
  406. }

  407. /**************************************************
  408. *                                  主函數在此                                                     *
  409. ***************************************************/
  410. void main()
  411. {

  412.         
  413.         while(1)
  414.         {
  415.                                           
  416.                
  417.                 deng6();//一個紅燈順時針轉動
  418.                 deng0_1();//四組紅燈順時針逐步點亮        
  419.                 deng0_2();//四組藍燈順時針逐步點亮
  420.                 deng9();//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
  421.                 deng3_2();//綠燈亮的時候,四個紅燈轉一下
  422.                 deng0_2();//四組藍燈順時針逐步點亮
  423.                 deng1();//四組綠燈順時針逐步熄滅
  424.                 deng8();//一個藍燈,順時針轉動
  425.                 deng3_4();//洋紅燈亮的時候,四個紅燈轉一下
  426.                 deng9();//一位顯示黃、綠、青、藍、洋紅、紅、白,多彩流水,然后再顯示下一位
  427.                 deng7();//一個綠燈,順時針轉動
  428.                 deng0_2();//四組藍燈順時針逐步點亮

  429.                 deng3(); //紅、黃、綠、青、藍、洋紅、白、紅,順時針流動(循環左移,即高位向低位移)
  430.                 deng0();//四組綠燈順時針逐步點亮

  431.                 deng3_1();//藍燈亮的時候,四個洋紅燈轉一下
  432.                
  433.                 deng3_3();//紅燈亮的時候,四個洋紅燈轉一下
  434.                
  435.                 deng3_5();//白燈亮的時候,四個青燈轉一下

  436.                 huxideng();//呼吸燈
  437.                 deng1();//四組綠燈順時針逐步熄滅

  438.          

  439.         }
  440. }
復制代碼

全部資料51hei下載地址:
rgb愛心燈.zip (35.58 KB, 下載次數: 66)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:65956 發表于 2020-11-23 11:03 | 只看該作者
這種不加驅動電路的設計會不會導致單片機總電流超出而損壞呢?特別是當同時亮時
回復

使用道具 舉報

板凳
ID:833013 發表于 2020-11-23 19:47 | 只看該作者
aking991 發表于 2020-11-23 11:03
這種不加驅動電路的設計會不會導致單片機總電流超出而損壞呢?特別是當同時亮時

這個只是仿真,驗證程序的,實際電路是有限流電阻的
回復

使用道具 舉報

地板
ID:1052292 發表于 2022-11-16 17:18 | 只看該作者
能不能分享一下原理圖謝謝小白
回復

使用道具 舉報

5#
ID:473377 發表于 2022-11-17 22:51 | 只看該作者
程序注釋很清晰,感謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲精品视频一区 | 成人影院在线视频 | 亚州国产 | 亚洲成人播放器 | 在线观看国产 | 91看片官网 | 一区二区三区国产精品 | 91香蕉视频在线观看 | 日本不卡高字幕在线2019 | caoporn国产精品免费公开 | 日韩欧美在线观看视频 | 国产成人精品一区二区三区网站观看 | 亚洲h视频 | 欧美精品网站 | 黑人巨大精品欧美黑白配亚洲 | 久久精品视频在线观看 | 亚洲精品视频一区 | 欧美一级全黄 | 中文字幕在线不卡 | 久久99精品久久久久久国产越南 | 久久成人18免费网站 | 国产69精品久久久久777 | 丁香婷婷综合激情五月色 | 日韩精品免费视频 | 精品国产精品国产偷麻豆 | 黄色网一级片 | 免费二区| 国产片侵犯亲女视频播放 | 天天操妹子 | 天堂色 | 婷婷精品| 人人性人人性碰国产 | 伊人在线 | 免费一二区 | 日韩免费av| 99精品视频在线观看 | 免费a大片 | 亚洲97 | av天天干 | 91色视频在线观看 | www.欧美.com |