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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7404|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

stc單片機(jī)數(shù)碼管顯示旋轉(zhuǎn)編碼器+pwm輸出源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
實(shí)現(xiàn)功能:
旋轉(zhuǎn)編碼器按鍵:切換占空比和頻率數(shù)碼管顯示編碼器設(shè)置的占空比和頻率
單片機(jī)輸出根據(jù)編碼器設(shè)置的占空比和頻率的pwm信號(hào)
目前數(shù)碼管無法顯示編碼器的數(shù)據(jù)

電路原理圖如下:



單片機(jī)源程序如下:
  1. #include "STC15F2K60S2.H"
  2. #include "intrins.h"
  3. //++++++++++++++pwm輸出
  4. #define        uchar        unsigned char//        0~255,1Byte
  5. #define        uint        unsigned int//0~65535,2Byte
  6. //==變量類型定義區(qū)     
  7. uchar  duty=111;//占空比8bit
  8. uchar        rate=11;//頻率
  9. uchar        ratex=0;//顯示"H"
  10. uchar  disp_buffer[]={1,1,1,10,10,1,1,11};//顯示緩沖定義
  11. uchar  led_code[]={0xc0,0xf9,0xa4,0xb0,0x98,0x92,0x82,0xf8,0x80,0x90,0xbf,0x89};//顯示0-9定義
  12. uchar  position[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八個(gè)數(shù)碼管定義
  13. uchar                disp_flag[]={0,0,0,0,0,0,0,0};//八個(gè)數(shù)碼管對(duì)應(yīng)標(biāo)記
  14. //==位變量區(qū)
  15. bit set_flag=0;//按鍵設(shè)置標(biāo)記
  16. //===硬件線路定義
  17. sbit        ECE=P5^5;//編碼器按鍵 ECA
  18. sbit        ECA=P3^2;//編碼器A相
  19. sbit        ECB=P4^0;//B相
  20. sbit  PWM=P3^6;//pwm輸出
  21. sbit  KEY1=P2^6;//預(yù)留
  22. sbit  KEY2=P2^7;//預(yù)留
  23. //==函數(shù)聲明區(qū)(函數(shù)清單)        
  24. void        display();//函數(shù)
  25. void  disp_suju();//顯示緩沖區(qū)函數(shù)
  26. void delayms(uchar count);//延時(shí)函數(shù)
  27. void        timer0_init();//定時(shí)器初始化函數(shù)
  28. void  k1();//編碼器按鍵ECA
  29. void INT_init (void);//外部中斷0
  30. void dutyANDf(duty,rate);//占空比調(diào)節(jié)函數(shù)
  31. //===主函數(shù)
  32. void        main()
  33. {               
  34.    while(1)
  35.          {
  36. timer0_init();//定時(shí)器函數(shù)
  37.         dutyANDf(duty,rate);
  38.                 display();
  39.                  k1();
  40.         INT_init ();
  41.        
  42.          }
  43. }
  44. //==顯示函數(shù)定義
  45. void        display()
  46. {                uchar i;
  47.         disp_suju();
  48.   for(i=0;i<8;i++)
  49.   {
  50.         P2=led_code[disp_buffer[i]];
  51.         P0=position[i];
  52.         delayms(1);
  53.         P2=0xff;//熄滅led
  54.         P0=0xff;//關(guān)閉led電源
  55.   }
  56. }
  57.        
  58. //顯示數(shù)據(jù)準(zhǔn)備

  59. void  disp_suju()//時(shí)鐘程序緩存函數(shù)
  60. {
  61.         disp_buffer[0]=duty/100;//占空比百
  62.   disp_buffer[1]=duty%100/10;
  63.         disp_buffer[2]=duty%10;
  64.         disp_buffer[3]=10;//-
  65.         disp_buffer[4]=10;//-
  66.   disp_buffer[5]=rate/10;//頻率十
  67.         disp_buffer[6]=rate%10;//頻率個(gè)
  68.         disp_buffer[7]=11;//H       

  69. }                     
  70. void delayms(uchar count)//延時(shí)
  71. {
  72.         uchar i,j;
  73.         for(i = 0; i < count; i++)
  74.                 for(j = 0; j < 120; j++);
  75. }                          

  76. void  k1()
  77. {
  78.        
  79.         if(ECE==0)
  80.         {//有按鍵
  81.                 set_flag=0;//頻率
  82.                
  83.         }
  84.         else
  85.                 {
  86.                 set_flag=1;//占
  87.        
  88.         }
  89. }
  90. void  INT_init(void)
  91. {
  92.          EA = 1;  
  93.          EX1 = 1;
  94.          EX0 = 1;
  95.          IT1 = 1;//下降沿觸發(fā)
  96.        
  97. }

  98. void exint0() interrupt 0
  99. {               
  100.         if(ECB==0)
  101.         {//正
  102.           if(set_flag==1)//占空比標(biāo)志
  103.            {
  104.                         duty++;
  105.                         if(duty==255)
  106.                         {
  107.                                 duty=255;
  108.                         }
  109.                         else{;}
  110.                                         display();
  111.                 }
  112.                 else
  113.                 {
  114.                 rate++;
  115.                         if(rate==20)
  116.                                 {
  117.                                 rate=20;
  118.                                 }
  119.                                 else{;}       
  120.                 }
  121.         }
  122.         else
  123.         {               
  124.         //反ecb==1
  125.         if(set_flag==1)//占
  126.                 {duty--;
  127.                         if(duty==1)
  128.                         {        duty=1;
  129.                         }else{;}
  130.        
  131.                 }
  132.                 else
  133.                 {       
  134.                 rate--;
  135.                         if(rate==1)
  136.                         {
  137.                         rate=1;
  138.                         }        display();
  139.                 }
  140.         }

  141.         }

  142. void Timer0Init(void)                //50??@12.000MHz
  143. {
  144.         AUXR &= 0x7F;               
  145.         TMOD &= 0xF0;               
  146.         TL0 = 0xB0;               
  147.         TH0 = 0x3C;               
  148.         TF0 = 0;               
  149.         TR0 = 1;               
  150. }

  151. //-------------------------------------
  152. void        timer0_int()        interrupt        1
  153. {       
  154.         if(ECA==0){
  155.         if(ECB==0)
  156.         {//正
  157.           if(set_flag==1)//占空比標(biāo)志
  158.            {
  159.                         duty++;
  160.                         if(duty==255)
  161.                         {
  162.                                 duty=255;
  163.                         }
  164.                         else{;}
  165.                                         display();
  166.                 }
  167.                 else
  168.                 {
  169.                 rate++;
  170.                         if(rate==20)
  171.                                 {
  172.                                 rate=20;
  173.                                 }
  174.                                 else{;}       
  175.                 }
  176.         }
  177.         else
  178.         {               
  179.         //反ecb==1
  180.         if(set_flag==1)//占
  181.                 {duty--;
  182.                         if(duty==1)
  183.                         {        duty=1;
  184.                         }else{;}
  185.        
  186.                 }
  187.                 else
  188.                 {       
  189.                 rate--;
  190.                         if(rate==1)
  191.                         {
  192.                         rate=1;
  193.                         }        display();
  194.                 }
  195.         }
  196. }else{;
  197. }
  198. }


  199. void dutyANDf(uchar duty,uchar f)
  200. {
  201.         int Xt1,Xt0;
  202.         float t1,t0;
  203.         uchar h1,l1,h0,l0;
  204.         t1=duty/f;                           
  205.         t0=(1/f)-t1;                     
  206.         Xt1=256-1000000*t1;        
  207.         Xt0=256-1000000*t0;;  
  208.         TMOD=0X01;
  209.         TR0=1;
  210.         h1=(uchar)(Xt1>>4);   
  211.         h0=(uchar)(Xt0>>4);   
  212.         l0=(uchar)Xt0;               
  213.         while(1)
  214.         {
  215.                         TH0=h1;
  216.                         TL0=l1;
  217.                         do{}while(!TF0);        
  218.                         PWM=!PWM;                       
  219.                         TF0=0;
  220.                         TH0=h0;
  221.                         TL0=l0;
  222.                         do{}while(!TF0);
  223.                         PWM=1;
  224.                         TF0=0;                  
  225.                                 
  226.         }
  227.                
  228. }
復(fù)制代碼

所有資料51hei提供下載:
編碼.rar (7.93 KB, 下載次數(shù): 77)


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

使用道具 舉報(bào)

沙發(fā)
ID:415603 發(fā)表于 2018-11-7 16:34 | 只看該作者
QQ:求大神指教1476538664
回復(fù)

使用道具 舉報(bào)

板凳
ID:72649 發(fā)表于 2018-11-8 13:22 來自手機(jī) | 只看該作者
給你一個(gè)參考代碼可以嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:72649 發(fā)表于 2018-11-8 13:24 來自手機(jī) | 只看該作者
中斷里面要軟件清零
回復(fù)

使用道具 舉報(bào)

5#
ID:415603 發(fā)表于 2018-11-8 15:32 | 只看該作者
hjx5548 發(fā)表于 2018-11-8 13:22
給你一個(gè)參考代碼可以嗎?

可以啊非常感謝
回復(fù)

使用道具 舉報(bào)

6#
ID:415603 發(fā)表于 2018-11-8 15:34 | 只看該作者
hjx5548 發(fā)表于 2018-11-8 13:24
中斷里面要軟件清零

int0是不是沒有正常工作,感覺數(shù)碼管顯示沒有接受到旋轉(zhuǎn)編碼器的duty,rate的值
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2018-11-8 18:58 | 只看該作者
編碼器不 是應(yīng)該有一個(gè)引腳要接地的嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:415603 發(fā)表于 2018-11-8 21:27 | 只看該作者
Y_G_G 發(fā)表于 2018-11-8 18:58
編碼器不 是應(yīng)該有一個(gè)引腳要接地的嗎?

在電路上接了
回復(fù)

使用道具 舉報(bào)

9#
ID:164336 發(fā)表于 2020-11-17 20:19 | 只看該作者
求大神指教
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av在线天天 | 日韩在线观看视频一区 | 孰女乱色一区二区三区 | 国产色| 蜜桃视频在线观看免费视频网站www | 91亚洲精选 | 看片91| 一级毛片视频免费观看 | 国产精品一区三区 | 天天曰夜夜 | 欧洲在线视频 | 免费中文字幕日韩欧美 | 国产精品91视频 | 在线观看特色大片免费网站 | 欧洲视频一区 | 精品久久久久国产免费第一页 | 国产午夜精品久久久久 | 99精品免费 | 国产一极毛片 | 亚洲精品在线观看网站 | 日本一级淫片免费啪啪3 | 成人自拍视频 | 亚洲三区在线 | 亚洲一区二区高清 | 日韩中文字幕一区 | 久久久久免费精品国产小说色大师 | 一级欧美一级日韩片 | 亚洲天天干 | 国产欧美在线一区 | 呦呦在线视频 | 一区二区在线 | 日韩精品在线免费观看视频 | 国产美女黄色片 | 韩日av在线 | 91av大全 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 免费看a | 久久大全 | 日韩国产一区 | 国产精品久久九九 | 在线观看黄色电影 |