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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機呼吸燈+流水

[復制鏈接]
跳轉到指定樓層
樓主
ID:376769 發表于 2018-7-21 19:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我最近寫的一個呼吸燈,第一次用頭文件寫遇到了好多小問題,有些問題解答了,有些沒解答,小編純屬小白,希望能夠對大家有所幫助

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

  2. 心形燈功能
  3. 類1:huxi()
  4. 類2:move()
  5. 組合:combine()
  6. 總體實現函數:amain()
  7. ****************************************/
  8. #include<reg52.h>
  9. #include"move.h"
  10. #include"type_def.h"
  11. /*1.***************全局變量聲明專區******************/
  12. u16 led1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  13. u16 led11[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  14. u16 led2[4]={0xfc,0xf3,0xcf,0x3f};
  15. u16 led3[5]={0xf8,0xf1,0xe3,0x8f,0x1f};
  16. u16 led4[4]={0xf0,0xc3,0x0f,0x3f};
  17. u16 led5[8]={0xe0,0x0e,0xd0,0x0d,0xc0,0x0c,0x70,0x07};
  18. u16 led6[2]={0x88,0xe0};
  19. //u16 flag=0;                           //動作選擇標志
  20. sbit key=P3^0;
  21. /*2.******************宏定義專區********************/
  22. #define length 10000                      //10ms
  23. #define w1_0  20                          //輸出有效電壓的步幅
  24. #define w0_0  10                           //初始化燈的亮度
  25. /*3.*****************函數聲明專區*******************/
  26. static void delay(u16 i);
  27. static void time_huxi();
  28. static void move_0();
  29. static u16 anjian_0(u16 f);
  30. /*4.**************函數實現模塊**********************/
  31. static void delay(u16 i)//延時
  32. {
  33. while(i--)
  34. {
  35. int j;
  36. for(j=0;j<125;j++);//1ms
  37.   }
  38. }
  39. static void time_huxi()//呼吸
  40. {
  41. TMOD|=0x01;//定時器進行方式
  42. TH0=(65536-10)/256;
  43. TL0=(65536-10)%256;//1ms初值
  44. ET0=1;
  45. EA=1;
  46. TR0=1;           //通過控制TR0,來選擇打呼吸燈的效果,緩解了cpu的壓力,因為只有在中斷瞬間才會跳進去,平常就在背后記著時間
  47. }
  48. static void move_0()  //流水0
  49. {
  50. while(1)
  51. {
  52.   u16 i;      //是小局部變量的全局變量,對于小局部變量,值不會釋放
  53.   for(i=0;i<8;i++)
  54.   {
  55.    P1=led1[i];
  56.    P0=led1[i];
  57.    delay(50);
  58.   }
  59.   P1=0XFF;
  60.   P0=0XFF;
  61.    for(i=0;i<8;i++)
  62.   {
  63.   
  64.    P3=led1[i];
  65.    P2=led11[i];
  66.    delay(50);
  67.   }
  68.   P2=0XFF;
  69.   P3=0XFF;
  70.   for(i=0;i<8;i++)
  71.   {
  72.       
  73.    P2=led1[i];
  74.    P3=led11[i];
  75.    delay(50);
  76.   }
  77.   P3=0XFF;
  78.   P2=0XFF;
  79.   for(i=0;i<8;i++)
  80.   {   
  81.    P1=led11[i];
  82.    P0=led11[i];
  83.    delay(50);
  84.   }
  85.   P1=0XFF;
  86.   P0=0XFF;
  87. }
  88. }
  89. static u16 anjian_0(u16 f)//按鍵檢測
  90. {
  91. if(key==0)
  92. {
  93.   delay(10);
  94.   if(key==0)
  95.   {
  96.    f++;//作為返回值,都達到加
  97.    while(!key);
  98.   }
  99. }
  100. return f;      //僅僅作為返回值返回,返回給誰需要指定
  101. }
  102. /*5.*******************函數組裝專區************************/
  103. void amain()
  104. {
  105. time_huxi();
  106. while(1)            //在執行定時器中斷的時候,必須加while(1)是程序不能從主函數中跳出來,進一步實現定時器里的程序,大多數函數雖然不要while(1)也行,會執行看門狗程序,但是有些必須加,加上絕對正確
  107. {
  108. //   static u16 flag=0;   //因為在循環的過程中,循環里面定義的變量也是一個局部變量,完成一次循環會自動釋放原始值
  109. //  flag=anjian_0(flag);
  110. //  switch(flag)
  111. //  {
  112. //   case 0:
  113. //          P0=0X00;break;
  114. //   case 1:
  115. //         P0=0X0F;break;
  116. //   case 2:
  117. //         P0=0XF0;
  118. //   break;
  119. //   default :flag=0;
  120. //  }
  121.   ;
  122. }
  123. }
  124. void bmain()
  125. {
  126. time_huxi();
  127.   move_0();

  128. }
  129. /*6.********************實現中斷專區****************/
  130. void T_PWM()interrupt 1
  131. {
  132. static int wide1=w0_0,wide2=length-w0_0,i=0,flag=0;//因為循環一次過后局部變量i釋放 了,所以沒有達到++效果
  133. TR0=0;
  134. if(flag==0)
  135. {
  136. i++;
  137. wide1+=w1_0;
  138. wide2-=w1_0;
  139. if(i%2==0)
  140. {
  141.   TH0=(65536-wide1)/256;
  142.   TL0=(65536-wide1)%256;
  143.    P2=0X0F;
  144. }
  145. else
  146.   {
  147.   TH0=(65536-wide2)/256;
  148.   TL0=(65536-wide2)%256;
  149.   P2=0XFF;
  150. }
  151. if(wide1==length-w0_0)
  152.   flag=1;
  153. }
  154. else if(flag==1)
  155. {
  156.   i++;
  157. wide1-=w1_0;
  158. wide2+=w1_0;
  159. if(i%2==0)
  160. {
  161.   TH0=(65536-wide1)/256;
  162.   TL0=(65536-wide1)%256;
  163.    P2=0X0F;
  164. }
  165. else
  166.   {
  167.   
  168.   TH0=(65536-wide2)/256;
  169.   TL0=(65536-wide2)%256;
  170.   P2=0XFF;
  171. }
  172.   if(wide1==w0_0)

  173.   flag=0;
  174. }
  175. TR0=1;//為什么有些時候聲明變量必須是在前面呢
  176. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品一区二区三区 | 久久久九九九九 | 亚洲一区二区在线免费观看 | 国产精品99久久久久久久久久久久 | 国产91网站在线观看 | 国产毛片毛片 | 国产精品视频一区二区三区 | 香蕉久久久 | 欧美一区二区三区大片 | a在线v| 黄色a级一级片 | 亚洲精品国产成人 | 91麻豆精品一区二区三区 | 综合久久综合久久 | 精品1区2区3区4区 | 免费午夜视频 | 国产区视频在线观看 | 国产特一级黄色片 | 毛片一区二区 | 日韩中文字幕在线观看视频 | 欧美天堂 | 欧美成人手机在线 | 亚洲伊人久久综合 | 人人爱干 | 久久久婷| 国产日韩一区 | 免费视频一区二区 | 91成人在线视频 | 亚洲欧美一区二区三区国产精品 | 久久精品成人 | 欧美视频 | 男女视频在线免费观看 | 欧洲视频一区二区 | 亚洲激情综合 | 精品一区二区三区在线视频 | 国产91av视频 | 欧美成人自拍视频 | 国产午夜视频 | 日韩福利一区 | 翔田千里一区二区 | 精品国产一区二区三区日日嗨 |