国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

STC15F104W單片機TM1803彩燈程序

[復制鏈接]
樓主
eng 發表于 2021-7-6 16:56:34 | 只看該作者 |倒序瀏覽 |閱讀模式

  1. /******************************************************************************/
  2. STC15F104W芯片
  3. 內部晶振18.432M
  4. /*******************************************************************************/

  5. #include <STC15F100W.H>                            //MCU頭文件
  6. #include "intrins.h"                            //包含nop指令頭文件

  7. #define nop  _nop_();   
  8.                    //宏定義
  9. /********************************定義控制端口***********************************/
  10. sbit DO=P3^4;                                    //定義信號輸出DO
  11. sbit led1=P3^1;
  12. sbit led2=P3^2;
  13. sbit led3=P3^3;
  14. /**********************************定義變量*************************************/
  15. unsigned int IC=6;                          //控制TM1804個數
  16. unsigned int LED_PX;                        //像素點數
  17. unsigned char PWM=255;                      //TM1804灰度數據
  18. unsigned char Rda,Gda,Bda;                  //R、G、B灰度數據
  19. unsigned char bdata LED_data;               //可位操作的數據發送暫存變量聲明
  20. sbit bit0=LED_data^0;                            //被發送的數據各位定義
  21. sbit bit1=LED_data^1;
  22. sbit bit2=LED_data^2;
  23. sbit bit3=LED_data^3;
  24. sbit bit4=LED_data^4;
  25. sbit bit5=LED_data^5;
  26. sbit bit6=LED_data^6;
  27. sbit bit7=LED_data^7;
  28. bit flag=0;                                 //定義一個標志位

  29. /**********************************延時函數*************************************/
  30. void delay(unsigned int n)                  //n=1,延時500us
  31. {
  32. unsigned int i;
  33. while(n--)
  34. for(i=0;i<860;i++);
  35. }

  36. /********************發送0碼函數,高電平400ns,周期1.25us************************/
  37. void send_data_0()   
  38. {
  39. DO=1;
  40. nop;nop;nop;nop;nop;
  41. nop;nop;nop;nop;nop;         
  42. DO=0;
  43. nop;nop;nop;nop;nop;nop;nop;
  44. nop;nop;nop;nop;nop;nop;nop;
  45. }

  46. /*******************發送1碼函數,高電平800ns,周期1.25us*************************/
  47. void send_data_1()   
  48. {
  49. DO=1;
  50. nop;nop;nop;nop;nop;nop;
  51. nop;nop;nop;nop;nop;
  52. nop;nop;nop;nop;nop;nop;
  53. nop;nop;nop;nop;nop;
  54. DO=0;   
  55. }

  56. /***********************發送1個字節數據,高位先發*******************************/
  57. void send_data(unsigned char DATA)               
  58. {
  59. LED_data=DATA;                          
  60. if(bit7)        send_data_1();        else send_data_0();
  61. if(bit6)        send_data_1();        else send_data_0();
  62. if(bit5)        send_data_1();        else send_data_0();
  63. if(bit4)        send_data_1();        else send_data_0();
  64. if(bit3)        send_data_1();        else send_data_0();
  65. if(bit2)        send_data_1();        else send_data_0();
  66. if(bit1)        send_data_1();        else send_data_0();
  67. if(bit0)        send_data_1();        else send_data_0();
  68. }
  69. /******************************發送1幀數據*************************************/
  70. void send_px()
  71. {
  72. unsigned int i;
  73. for(i=0;i<LED_PX;i++)
  74.   {
  75.    send_data(Rda);             //發送R灰度數據
  76.    send_data(Gda);             //發送G灰度數據
  77.    send_data(Bda);             //發送B灰度數據
  78.   }
  79. }
  80. /*===============================主函數=======================================*/
  81. void main()
  82. {
  83. unsigned char i;
  84. P3M0=0xFF;
  85. P3M1=0x00;
  86. led1=led2=led3=0;
  87. LED_PX=IC;                          //像素點數等于TM1804個數
  88. Rda=Gda=Bda=0;                      //R、G、B灰度數據復位清零
  89. while(1)
  90.   {
  91.    for(i=0;i<PWM;i++)          //紅色漸亮  
  92.     {
  93.      Rda=i;              //灰度計算
  94.      send_px();          //發送灰度數據
  95.      delay(50);          //復位延時
  96.     }
  97.     flag=1;                     //標志位置位
  98.     while(flag)                 //標志位置位后循環函數
  99.     {
  100.      for(i=0;i<PWM;i++)  //紅色漸滅,綠色漸亮
  101.       {
  102.        Gda=i;
  103.        Rda=PWM-i;  //灰度計算
  104.        send_px();  //發送灰度數據
  105.        delay(50);  //復位延時
  106.       }
  107.      for(i=0;i<PWM;i++)  //綠色漸滅,藍色漸亮
  108.       {
  109.        Bda=i;           
  110.        Gda=PWM-i;  //灰度計算
  111.        send_px();  //發送灰度數據
  112.        delay(50);  //復位延時
  113.       }
  114.      for(i=0;i<PWM;i++)  //藍色漸滅,紅色漸亮
  115.       {
  116.        Rda=i;
  117.        Bda=PWM-i;  //灰度計算
  118.        send_px();  //發送灰度數據
  119.        delay(50);  //復位延時
  120.       }
  121.     }
  122.   }
  123. }
  124. /*================================結束==========================================*/
復制代碼


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

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 05:12

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表