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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Pwm波形,頻率,占空比,可調,且LCD1602顯示占空比

  [復制鏈接]
跳轉到指定樓層
樓主
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int //float fosc=12000000;  //系統時鐘頻率
sbit key1=P1^1;       //控制周期的增加
sbit key2=P1^2;        //控制周期的減少
sbit key3=P1^3;       //控制占空比的增加
sbit key4=P1^4;        //控制占空比的減少
sbit clk=P1^0;                         //pwm輸出
sbit wei=P2^7;
sbit duan=P2^6;
sbit RS = P3^5;
sbit RW = P3^6;
sbit EN = P3^4;
uint zkb=50;     //占空比初值,取值范圍為1到99
uint shi,ge;
uint period=35;       //周期初值,取值范圍為5ms到60ms
uint time0_H,time0_L,time1_H,time1_L;  //延時程序         
  void delayms(uint z)
   {   uint i,j;  
     for(i=z;i--;i>0)   
            for(j=110;j--;j>0);
   }
  //系統初始化
/*uint code leddata[]={

                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義

                         };        */
//void display(uint i)
/*{
uint shi,ge;
shi=i/10;
ge=i%10;

P0=0xff;
wei=1;
P0=0xfe;//1111 1110
wei=0;

duan=1;
P0=leddata[shi];
duan=0;
delayms(10);

P0=0xff;
wei=1;
P0=0xfd;//1111 1101
wei=0;

duan=1;
P0=leddata[ge];
duan=0;
delayms(10);

}*/
  void init()
  {  TMOD=0x11;     //定時器0和1都工作在方式1
     time0_H=(65536-35000)/256;   
     time0_L=(65536-35000)%256; //35ms定時
         time1_H=(65536-17500)/256;  
     time1_L=(65536-17500)%256; //17.5ms定時,50%占空比
     TH0=time0_H;
   //定時器0裝入初值,計數器計數35000次,35ms
     TL0=time0_L;   
         TH1=time1_H; //定時器1裝入初值,計數器計數17500次,17.5ms
         TL1=time1_L;
          IT0=1;      //外部中斷0為下降沿觸發
          EX0=1;      //開外部中斷0允許位
          ET0=1;      //定時器T0中斷允許
      ET1=1;      //定時器T1中斷允許
      EA=1;       //開啟總中斷
      TR0=1;      //開啟定時器0
  }
//判斷液晶忙,如果忙則等待           第一步:讀狀態
void Read_Busy()
{
        uchar busy;
        P0 = 0xff; //給P0送1111 1111  
        RS = 0;
        RW = 1;
        do
        {
                EN = 1;
                busy = P0;
                EN = 0;
        }while(busy & 0x80);//讀寫檢測,判斷STA7為是否位1,為1,則忙,循環等待。
}
//寫LCD1602一個字節命令
void Write_Cmd(uchar cmd)         //第二步:寫指令
{
        Read_Busy();//判斷忙
        RS = 0;
        RW = 0;
        P0 = cmd;
        EN = 1;
        EN = 0;
}
//寫一個字節數據
void Write_Dat(uint dat)                 //第三步:寫數據
{
        Read_Busy();
        RS = 1;
        RW = 0;
        P0 = dat;
        EN = 1;
        EN = 0;
}
void LCD_init()
{
        Write_Cmd(0x38);//設置16*2顯示
        Write_Cmd(0x0c);//開顯示 顯示光標,光標閃爍         
        Write_Cmd(0x01);//清屏

        Write_Cmd(0x06);//地址指針移位命令
}
  //主程序
  void main()
  {
        uint num[2];
        init( );

                shi=zkb/10;
                ge=zkb%10;

            num[0]=shi;
        num[1]=ge;

            LCD_init();

        //Write_Cmd(0x80 | 0x00);//顯示地址
   while(1)
   {
            shi=zkb/10;
                ge=zkb%10;
            num[0]=shi;
        num[1]=ge;
           Write_Cmd(0x80 | 0x00);//顯示地址
        Write_Dat(25 + 'A');  //z
        Write_Dat(10 + 'A');  //k
        Write_Dat(1 + 'A');          //b
        Write_Dat(0x3A);          //:
        Write_Dat(num[0]+'0');        //十位
        Write_Dat(num[1]+'0');        //個位
        delayms(10);
   }
   }
  //TO中斷程序

  void T0_time() interrupt 1    //控制PWM波的周期
   {  
      TR1=1;            //開定時器1  
      TH0=time0_H;  
      TL0=time0_L;  
          clk=1;
         } //T1中斷程序
  void T1_time() interrupt 3                 //控制PWM波的占空比
   {   TR1=0;             //關定時器1  
       TH1=time1_H;  
           TL1=time1_L;  
           clk=0;
           } //鍵盤掃描程序
  void  keyscan()  interrupt 0 //外部中斷0,用來查詢是否有按鍵按下
         {   float TX,TZ; //定義浮點型變量,4字節長度
          EX0=0;             //關中斷  
          delayms(10);       //延時消抖
          if(P1!=0x1e)       //延時消抖完畢,判斷的確有按鍵按下
                   if(key1==0)        //判斷是哪個按鍵按下
                      {   
                           period=period+5;           
                           if(period>60)            
                             period=5;   
                                  }      
                                   if(key2==0)         
                                    {     period=period-5;      
                                                  if(period<5)        
                                       period=60;  
                                  }   
                                if(key3==0)         
                                 {   
                                        
                                        zkb=zkb+1;
                                  
                                               
                                         if(zkb>99)         
                             zkb=1;        
                             }      
                             if(key4==0)         
                  {
                                  
                                  zkb=zkb-1;
                                          
                                 if(zkb<1)            
                                 zkb=99;     
                                  }  
                      TX=(65536-(period)*1000);//周期計算 。。!
                      TZ=(65536-(period/2)*1000+(50-zkb)*period*10);//占空比計算???   
                      time0_H=(uint)TX/256;
              time0_L=(uint)TX%256;   
              time1_H=(uint)TZ/256;   
                  time1_L=(uint)TZ%256;   
                      P1=0x1e;  //P1口重新賦值,以便下次按鍵判斷
                  EX0=1;   //開外部中斷
                      TR0=1;  //開定時器0
                      TR1=1; //開定時器1
                 }


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

使用道具 舉報

沙發
ID:297159 發表于 2018-6-27 20:07 | 只看該作者


回復

使用道具 舉報

板凳
ID:360843 發表于 2018-7-11 16:55 | 只看該作者
不錯   正在學習PWM   謝謝
回復

使用道具 舉報

地板
ID:375055 發表于 2018-7-19 19:48 | 只看該作者
這個可以有
回復

使用道具 舉報

5#
ID:243748 發表于 2018-7-21 22:56 來自手機 | 只看該作者
怎么下載?
回復

使用道具 舉報

6#
ID:386237 發表于 2018-8-18 21:56 來自手機 | 只看該作者
樓主能不能把完整的電路圖發出來?
回復

使用道具 舉報

7#
ID:450227 發表于 2018-12-24 13:36 | 只看該作者
燒錄進去怎么沒有顯示啊
回復

使用道具 舉報

8#
ID:297159 發表于 2024-12-19 17:50 | 只看該作者
時間太久遠了  我找一找  回頭
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久大陆 | 欧美一区二区三区在线 | 美女露尿口视频 | 精品视频久久久 | 久久精品99国产精品日本 | 日韩三级免费观看 | 日日干日日 | 国产免费让你躁在线视频 | 四虎永久在线精品免费一区二 | 久久久久久国产一区二区三区 | 亚洲综合激情 | 日韩国产欧美 | 成人精品福利 | 成人性视频在线播放 | 国产 欧美 日韩 一区 | 伊人av在线播放 | 欧美理论片在线观看 | 亚洲 91 | 国产三级一区二区三区 | 国产91精品久久久久久久网曝门 | 视频一二区 | 亚洲欧美在线观看 | 91在线电影| 成人精品免费视频 | 日韩欧美国产不卡 | 少妇淫片aaaaa毛片叫床爽 | 国产黄色小视频在线观看 | 欧美日韩综合一区 | 玖玖久久 | 五月天婷婷综合 | 亚洲伦理自拍 | 久色| 免费99精品国产自在在线 | 成人三级在线播放 | 日韩性生活网 | 久久精品国产久精国产 | 狠狠操狠狠搞 | 久久综合一区二区 | 欧美日韩亚洲视频 | 一区二区三区网站 | 亚洲一区中文字幕 |