欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1973|回復: 1
收起左側

單片機PWM控制LED同步漸變分控效果程序

[復制鏈接]
ID:1002758 發表于 2022-1-20 11:51 | 顯示全部樓層 |閱讀模式
  1. //************************************
  2. //***********
  3. //****        2004-06-19        mcu at89c2051 38400BPS  OSC 22.1184MHZ
  4. //************************************
  5. #include <at892051.h>
  6. #include <stdio.h>//一般I/O函數
  7. #include <stdlib.h>//標準函數
  8. #include <absacc.h>//絕對地址
  9. #include <intrins.h>//內部函數       
  10. #include <setjmp.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. #define Byte unsigned char
  14. #define Word unsigned int
  15. #define ulong unsigned long
  16. #define bool bit
  17. #define true 1
  18. #define false 0
  19. #define V_TH0   0xff  /* 時間常數高8位 (65536-500)/256                        */
  20. #define V_TL0   0x80  /* 時間常數低8位 (65536-500)%256   11.0592*/
  21. #define ADD 1
  22. //******************************
  23. sbit roe=P3^2;
  24. sbit goe=P3^3;
  25. sbit boe=P3^4;
  26. //**************************************************************
  27. uchar        dis_buf_r,dis_buf_g,dis_buf_b;        //顯示緩沖
  28. uchar         mode;                               
  29. uchar         pointer;
  30. uchar        send_buf[4];
  31. uchar        pwm,rl;
  32. uchar         setadd;
  33. jmp_buf env;
  34. int retval;
  35. uchar bdata flags;
  36. sbit flag0=flags^0;
  37. sbit flag1=flags^1;
  38. sbit flag2=flags^2;
  39. sbit flag3=flags^3;
  40. sbit frameok=flags^4;
  41. //*********************************
  42. void         delay(uint j);
  43. void        qcgd(uint speed);
  44. //*********************************
  45. void main(void)
  46. {
  47. TMOD=0x21;
  48. SCON=0xd0;
  49. TH1=0xfd;
  50. TL1=0xfd;        //256-(22.1184*10~6/32/12/3/38400*2)
  51. //PCON=0X80;//倍頻
  52. SM2=1;
  53. TL0=V_TL0;
  54. TH0=V_TH0;
  55. TR0=1;
  56. ET0=1;
  57. TR1=1;
  58. ET1=0;
  59. ES=1;
  60. EA=1;
  61. PS=1;
  62. frameok=0;
  63. pointer=0;
  64. dis_buf_b=dis_buf_g=dis_buf_r=15;
  65. setadd=(~P1)&0xff;
  66. while(1)
  67.         {
  68.         if(mode==0x55)
  69.                 {delay(4);}
  70.         else
  71.                 {
  72.                 retval=setjmp(env);
  73.                 if(retval==0)
  74.                         {
  75.                         qcgd(20);
  76.                         }
  77.                 }
  78.         }
  79. }
  80. //*********************************
  81. //   接收數據
  82. //*********************************
  83. void        receive(void)
  84. {
  85. dis_buf_r=send_buf[1];
  86. dis_buf_g=send_buf[2];
  87. dis_buf_b=send_buf[3];
  88. }
  89. //*****************************************
  90. //         延時
  91. //**************************************
  92. void delay(uint tim)
  93. {
  94. uint i;
  95. while(tim!=0)
  96.         {
  97.         for(i=0;i<50;i++)
  98.                 {
  99.                 if(frameok)
  100.                         {receive();
  101.                         mode=0x55;
  102.                         frameok=0;
  103.                         SM2=1;
  104.                         pointer=0;
  105.                         retval=1;
  106.                         longjmp(env,retval);
  107.                         }
  108.                 }  
  109.         tim--;
  110.         }
  111. }
  112. //************************************
  113. //七彩過渡roe=(dis_buf_r<pwm)?0:1;
  114. //**********************************
  115. void        qcgd(uint speed)
  116. {

  117. //for(i=0;i<255;i++){dis_buf_r=i;dis_buf_g=0;dis_buf_b=0;delay(speed);}//red
  118. /*
  119. for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=i;dis_buf_b=0;delay(speed);}//yeloww
  120. for(i=0;i<16;i++){dis_buf_r=~i;dis_buf_g=15;dis_buf_b=0;delay(speed);}//grn
  121. for(i=0;i<16;i++){dis_buf_r=0;dis_buf_g=15;dis_buf_b=i;delay(speed);}//qi
  122. for(i=0;i<16;i++){dis_buf_r=0;dis_buf_g=~i;dis_buf_b=15;delay(speed);}//blu
  123. for(i=0;i<16;i++){dis_buf_r=i;dis_buf_g=0;dis_buf_b=15;delay(speed);}//zhi
  124. for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=i;dis_buf_b=15;delay(speed);}//w
  125. for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=~i;dis_buf_b=~i;delay(speed);}//r
  126. */
  127. for(dis_buf_g=63;dis_buf_g<64;dis_buf_g--)
  128.         {dis_buf_b=dis_buf_g;delay(speed);}//r
  129.         dis_buf_r=63;dis_buf_g=0;dis_buf_b=0;

  130. for(dis_buf_g=1;dis_buf_g<64;dis_buf_g++)
  131.         {delay(speed);}//y
  132.         dis_buf_g=63;
  133. for(dis_buf_r=63;dis_buf_r<64;dis_buf_r--)
  134.         {delay(speed);}//g
  135.         dis_buf_r=0;
  136. for(dis_buf_b=1;dis_buf_b<64;dis_buf_b++)
  137.         {delay(speed);}//q
  138.         dis_buf_b=63;
  139. for(dis_buf_g=63;dis_buf_g<64;dis_buf_g--)
  140.         {delay(speed);}//b
  141.         dis_buf_g=0;
  142. for(dis_buf_r=1;dis_buf_r<64;dis_buf_r++)
  143.         {delay(speed);}//z
  144.         dis_buf_r=63;
  145. for(dis_buf_g=1;dis_buf_g<64;dis_buf_g++)
  146.         {delay(speed);}//w
  147.         dis_buf_g=63;
  148. }

  149. //****************************************
  150. //                 通訊子程序
  151. //**************************************
  152. void send(void) interrupt  4
  153. {
  154. if(!TI && RI && !frameok)
  155.         {RI=0;
  156.         if(pointer==0)
  157.                 {
  158.                 if(SBUF==setadd||SBUF==0)
  159.                         {
  160.                         SM2=0;pointer++;
  161.                         }
  162.                 }
  163.         else
  164.                 {
  165.                   if(pointer<3)
  166.                     {send_buf[pointer]=SBUF;pointer++;}
  167.                   else
  168.                      {
  169.                         send_buf[pointer]=SBUF;
  170.                         frameok=1;
  171.                         }
  172.                 }
  173.         }//end if
  174. }//end sub
  175. //*******************************************
  176. void timer1() interrupt  1  
  177. {
  178. TL0=V_TL0;
  179. TH0=V_TH0;
  180. pwm++;
  181. if(pwm>63)pwm=0;
  182. //for(pwm=0;pwm<64;pwm++)
  183. //        {
  184.         roe=(dis_buf_r<=pwm)?1:0;
  185.         goe=(dis_buf_g<=pwm)?1:0;
  186.         boe=(dis_buf_b<=pwm)?1:0;
  187. //        }
  188. }//end sub
復制代碼


評分

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

查看全部評分

回復

使用道具 舉報

ID:262 發表于 2022-1-20 17:52 | 顯示全部樓層
缺少頭文件啊 樓主能分享一下嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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