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

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

QQ登錄

只需一步,快速開(kāi)始

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

上位機(jī)控制單片機(jī)pwm程序與Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
通過(guò)串口助手和虛擬串口,實(shí)現(xiàn)仿真,上位機(jī)發(fā)送1/2/3.....控制占空比。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned char uint8;
  3. typedef unsigned int  uint16;
  4. #define uint unsigned int
  5. uint pp;
  6. char num=2,dis;
  7. #define jingzhen     11059200UL                         /*使用晶體*/         
  8. #define botelv   9600UL                     /*波特率定義為9600*/
  9. unsigned char zifuchuan[]="清翔電子開(kāi)發(fā)板是您最好的選擇!\n";                        //待顯示字符。
  10. volatile unsigned char sending;
  11. sbit down = P3^5;
  12. sbit up = P3^6;
  13. sbit  led=P1^0;
  14. uint8 t = 0;
  15. uint8 PWM_T = 0;   //占空比控制變
  16. unsigned char posit=0;
  17. sbit W1=P2^4;
  18. sbit W2=P2^5;
  19. sbit W3=P2^6;
  20. sbit W4=P2^7;

  21. unsigned char buf;
  22. unsigned char code table[]=
  23. {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF,0x00};
  24. unsigned char disbuff[4]={0,0,0,0};        
  25. void delayms(unsigned int z) //延時(shí) z ms   //這里用來(lái)修改是12延時(shí)還是51 ,帶xy的是12
  26. {        
  27.         int i;
  28.         while(z--)
  29.         for(i=0;i<110;i++);        
  30. }
  31. void keyscan()
  32. {
  33.                    if(!up)
  34.                          {
  35.                                 if(PWM_T<100)
  36.                                         {
  37.                                           PWM_T=PWM_T+10;
  38.                                                 
  39.                                         }num++;
  40.                                         if(num>9) num=9;
  41.                                 while(up==0);
  42.                         
  43.                         }
  44.                  if(!down)
  45.                          {
  46.                                 if(PWM_T>0)
  47.                                         {
  48.                                           PWM_T=PWM_T-10;
  49.                                                 
  50.                                         }num--;
  51.                                         if(num<0) num=0;
  52.                                         while(down==0);
  53.                         
  54.                         }

  55.         
  56. }
  57. void play()   //顯示數(shù)字
  58. {
  59.          P0=0XFF;
  60.         
  61.          if(posit==0)P0=table[1];               
  62.          if(posit==1)P0=table[0];
  63.          if(posit==2){P0=table[num];}
  64.                 switch(posit)
  65.                 {
  66.                         case 0 : W1=1;W2=0;W3=0;W4=0; break;
  67.                         case 1 : W1=0;W2=1;W3=0;W4=0; break;
  68.                         case 2 : W1=0;W2=0;W3=1;W4=0; break;
  69.                         //case 3 : W1=0;W2=0;W3=0;W4=1; break;
  70.                 }
  71.                 delayms(5);
  72.                 posit++;
  73.                 if(posit>2)                //每進(jìn)一次顯示函數(shù),變量加1
  74.                         posit=0;         
  75. }
  76. void init()
  77. {
  78.         SCON = 0x50;                        // SCON: 方式 1, 8-bit, 允許接收數(shù)據(jù)
  79.         TMOD |= 0x20;               // TMOD: 設(shè)置定時(shí)器1工作在方式2, 8-bit 自動(dòng)重裝
  80.         TH1 = 0xFD;               // TH1:  初始值為0xFD  波特率:9600 晶振頻率:11.0592MHz  
  81.         TL1 = 0x0;
  82.         TR1 = 1;                  // TR1:  開(kāi)啟定時(shí)器1                        
  83.         EA  = 1;                  //打開(kāi)總中斷
  84.         ES  = 1;                  //打開(kāi)串口中斷
  85. }
  86. // 發(fā)送一個(gè)字節(jié)數(shù)據(jù)
  87. void uart_send_byte(unsigned char dat)
  88. {
  89.         SBUF = dat;
  90.         while(!TI);
  91.         TI = 0;
  92. }

  93. // 發(fā)送字符串
  94. void uart_send_str(unsigned char *s)
  95. {
  96.         while(*s != '\0')
  97.         {
  98.                 uart_send_byte(*s);
  99.                 s++;
  100.         }
  101. }

  102. void main()
  103. {
  104.         TMOD = 0x02;   //定時(shí)器0,工作模式2,8位定時(shí)模式
  105.         TH0=210;     //寫(xiě)入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
  106.         TL0=210;     //寫(xiě)入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
  107.         TR0=1;       //啟動(dòng)定時(shí)器
  108.         ET0=1;       //允許定時(shí)器0中斷
  109.         EA=1;        //允許總中斷
  110.         led=1;          //初始化P1,輸出端口
  111.         PWM_T=30;
  112.         init();
  113.         while(1)
  114.         {
  115.                 keyscan();

  116.            play();//顯示num當(dāng)前值,占空比為num/10。
  117.         }
  118. }

  119. /****************************************************
  120.                /定時(shí)器0中斷模擬PWM
  121. ****************************************************/
  122. timer0() interrupt 1  
  123. {
  124.          t++;    //每次定時(shí)器溢出加1
  125.          
  126.          if(t==100)   //PWM周期 100個(gè)單位
  127.                  {
  128.                           t=0;  //使t=0,開(kāi)始新的PWM周期
  129.                           led=0;  //輸出端口
  130.                  }
  131.          
  132.          if(PWM_T==t)  //按照當(dāng)前占空比切換輸出為高電平
  133.                  {  
  134.                          led=1;        //  
  135.                  }

  136. }

  137. void uart_interrupt(void) interrupt 4                 //也叫串行中斷服務(wù)程序
  138. {
  139.         unsigned char recv_data;// 用來(lái)存放接收到的數(shù)據(jù)
  140.         unsigned char send_data[] = "I received.\n";// 要發(fā)送的信息
  141.         
  142.         if(RI) //接收數(shù)據(jù)(1字節(jié))完畢,RI會(huì)被硬件置1
  143.         {
  144.                 RI = 0;                            // 將 接收中斷標(biāo)志位 清零(讓串口可以繼續(xù)接收數(shù)據(jù))
  145.                 recv_data = SBUF;                   //讀取接收到的數(shù)據(jù),并存放到data
  146.         
  147.                
  148.                 if(recv_data == '0'){num=0;PWM_T=0;}               
  149.                 if(recv_data == '1'){num=1;PWM_T=10;}               
  150.                 if(recv_data == '2'){num=2;PWM_T=20;}               
  151.                 if(recv_data == '3'){num=3;PWM_T=30;}               
  152.                 if(recv_data == '4'){num=4;PWM_T=40;}               
  153.           if(recv_data == '5'){num=5;PWM_T=50;}
  154.                 if(recv_data == '6'){num=6;PWM_T=60;}               
  155.                 if(recv_data == '7'){num=7;PWM_T=70;}               
  156.                 if(recv_data == '8'){num=8;PWM_T=80;}
  157.                 if(recv_data == '9'){num=9;PWM_T=90;}
  158.                 play();
  159.           uart_send_str(send_data);
  160.         }
  161.         if(TI)
  162.         {
  163.                 TI = 0;
  164.         }
  165. }

  166. /*void  serial() interrupt 4
  167. {
  168.    ES = 0;                //關(guān)閉串行中斷
  169.    RI = 0;                //清除串行接受標(biāo)志位
  170.    buf = SBUF;            //從串口緩沖區(qū)取得數(shù)據(jù)
  171.   switch(buf)
  172.    {
  173.       case '0':  num=0;PWM_T=0;break;  
  174.                   case 0x32:  num=1;PWM_T=10;break;         
  175.       case 0x33:  num=2;PWM_T=20;break;         
  176.       case 0x34:  num=3;PWM_T=30;break;         
  177.       case 0x35:  num=4;PWM_T=40;break;        
  178.       case 0x36:  num=5;PWM_T=50;break;              
  179.       case 0x37:  num=6;PWM_T=60;break;                     
  180.       case 0x38:  num=7;PWM_T=70;break;  
  181.             case 0x39:  num=8;PWM_T=80;break;  
  182.                   case 0x40:  num=9;PWM_T=90;break;  
  183.             default:    num=10; break;         
  184.    }
  185.          play();
  186.    ES = 1;    //允許串口中斷
  187. }*/
復(fù)制代碼

串口助手下載:http://www.zg4o1577.cn/bbs/dpj-199058-1.html
vspd虛擬串口助手可以到百度搜索或者51hei下載

所有資料51hei提供下載:
上位機(jī)控制pwm.zip (4.97 MB, 下載次數(shù): 24)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品视频一区二区三区在线观看 | 欧美1—12sexvideos | 999久久久国产精品 欧美成人h版在线观看 | 国产精品国产三级国产aⅴ中文 | 久久久91 | 日韩欧美国产精品一区二区三区 | 久久精品国产一区老色匹 | 欧美日韩亚洲国产 | 在线视频一区二区三区 | 一区二区三区四区在线视频 | .国产精品成人自产拍在线观看6 | 99re在线 | 国产精品一区三区 | 国产一区二区三区久久久久久久久 | 91国产在线视频在线 | 少妇av片 | 日干夜操| 欧美日韩在线观看一区 | 丝袜久久 | 999精品视频| 国产乱码精品一区二三赶尸艳谈 | 欧美日韩久久久久 | 久久精品av麻豆的观看方式 | 欧美八区 | 毛色毛片免费看 | 国产日韩欧美电影 | 精品美女视频在免费观看 | 精品无码久久久久久国产 | 成人免费淫片aa视频免费 | 91在线看片 | 天天干天天玩天天操 | 亚洲国产成人精品女人久久久 | 成人免费影院 | 中文字幕 国产 | 日韩综合在线视频 | 狠狠做深爱婷婷综合一区 | www.日本国产 | 欧美一区2区三区4区公司 | 成人午夜网 | 国产精品成人一区二区 | 国内精品伊人久久久久网站 |