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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新手求助,請高手看看單片機程序問題出在哪里?

[復制鏈接]
跳轉到指定樓層
樓主
ID:217075 發表于 2021-3-18 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機STC15W202S
sout,xout分別控制2路可控硅,實現加熱爐的強弱檔控制,強檔可控硅始終導通,弱檔可控硅斷續導通,定時器T0確定弱檔時的周期t0,T2確定占空比t1/t0,每路兩個按鈕,開關和強弱選擇
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit sqr=P1^3; //輸出強弱選擇按鍵1
sbit skg=P1^2; //輸出開關鍵1,打開進入強輸出狀態
sbit xqr=P1^5; //輸出強弱選擇按鍵2
sbit xkg=P1^4; //輸出開關鍵2,同1

sbit sout=P1^1;        //輸出1
sbit xout=P3^0;        //輸出2
sbit sq=P3^7;  //輸出1強發光二極管顯示
sbit sr=P3^6;  //輸出1弱發光二極管顯示
sbit xq=P3^1;  //輸出2強發光二極管顯示
sbit xr=P3^2;  //輸出2弱發光二極管顯示


uchar t0=20;
uchar t1=10;
uchar num1;
uchar num2;
uchar led1;
uchar led2;
uchar scan;
uchar xcan;


void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}



void ledcan()
{
         if((skg==0)&&(scan==1))
        {
                delayms(10);
                if((skg==0)&&(scan==1))
                {
                    TR0=0;
                        AUXR&=0x00;
                        while(!skg);
                        TR0=1;
                        AUXR|=0x10;
                        scan=0;
                        sout=0;
                        sq=0;
                        sr=1;
                }
                delayms(10);
        }

        if((skg==0)&&(scan==0))
        {
                delayms(10);
                if((skg==0)&&(scan==0))
                {
                    TR0=0;
                        AUXR&=0x00;
                        while(!skg);
                        TR0=1;
                        AUXR|=0x10;
                        scan=1;
                        sout=1;
                        sq=1;
                        sr=1;
                }
                delayms(10);
        }

        if((xkg==0)&&(xcan==1))
        {
                delayms(10);
                if((xkg==0)&&(xcan==1))
                {
                    TR0=0;
                        AUXR&=0x00;
                        while(!xkg);
                        TR0=1;
                        AUXR|=0x10;
                        xcan=0;
                        xout=0;
                        xq=0;
                        xr=1;
                }
                delayms(10);
        }

        if((xkg==0)&&(xcan==0))
        {
                delayms(10);
                if((xkg==0)&&(xcan==0))
                {
                    TR0=0;
                        AUXR&=0x00;
                        while(!xkg);
                        TR0=1;
                        AUXR|=0x10;
                        xcan=1;
                        xout=1;
                        xq=1;
                        xr=1;
                }
                delayms(10);
        }

/*******************************************/
        if((sqr==0)&&(scan==0)&&(sq==0))
        {
                delayms(10);
                if((sqr==0)&&(scan==0)&&(sq==0))                                
                {
                    TR0=0;
                        AUXR&=0x00;
                        while(!sqr);
                        TR0=1;
                        AUXR|=0x10;
                        sout=led2;                        
                        sq=1;
                        sr=0;
                }
                delayms(10);
        }

        if(sr==0)
        {
         sout=led2;
        }
        
        if((sqr==0)&&(scan==0)&&(sr==0))
        {
                delayms(10);
                if((sqr==0)&&(scan==0)&&(sr==0))                                
                {

                    TR0=0;
                        AUXR&=0x00;
                        while(!sqr);
                        TR0=1;
                        AUXR|=0x10;
                        sout=0;
                        sq=0;
                        sr=1;
                }
                delayms(10);
        }
               
        if((xqr==0)&&(xcan==0)&&(xq==0))
        {
                delayms(10);
                if((xqr==0)&&(xcan==0)&&(xq==0))        
                {
            TR0=0;
                        AUXR&=0x00;
                        while(!xqr);
                        TR0=1;
                        AUXR|=0x10;
                        xout=led2;                        
                        xq=1;
                        xr=0;
                }
                delayms(10);
        }

        if(xr==0)
        {
         xout=led2;
        }

        if((xqr==0)&&(xcan==0)&&(xr==0))
        {
                delayms(10);
                if((xqr==0)&&(xcan==0)&&(xr==0))        
                {
            TR0=0;
                        AUXR&=0x00;
                        while(!xqr);
                        TR0=1;
                        AUXR|=0x10;
                        xout=0;
                        xq=0;
                        xr=1;
                }
                delayms(10);
        }
}


void main()
{
        sqr=1;
        skg=1;
        xqr=1;
        xkg=1;

        sout=1;
        xout=1;
        sq=1;
        sr=1;
        xq=1;
        xr=1;

        num1=0;
        num2=0;
        led1=0;
        led2=0;
        scan=1;
        xcan=1;


        TMOD=0x11;
        TH0=(65535-45872)/256;
        TL0=(65535-45872)%256;
        T2H=(65535-45872)/256;
        T2L=(65535-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;
    IE2|=0x04;
        AUXR|=0x10;
               
        while(1)

        {
            ledcan();
        }
}

void T0time() interrupt 1
{
        TH0=(65535-45872)/256; //50ms初值
        TL0=(65535-45872)%256;
        num1++;
                if(num1==t0)
            {
                        TR0=0;
                        AUXR&=0x00;
                    led1=1;                        
                    delayms(5);
                        TR0=1;
                        AUXR|=0x10;
                    led1=0;
                    num1=0;        
            }
}

void T2time() interrupt 12
{   

        T2H=(65535-45872)/256;
        T2L=(65535-45872)%256;
        num2++;
                if(num2==t1)
            {
                    AUXR&=0x00;
                    led2=1;                                
            }
                if(led1==1)
                {
                    AUXR|=0x10;
                        num2=0;
                        led2=0;
                }
}


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

使用道具 舉報

沙發
ID:235200 發表于 2021-3-18 13:42 | 只看該作者
程序那么長,你要描述你的問題吧!
回復

使用道具 舉報

板凳
ID:213173 發表于 2021-3-18 15:36 | 只看該作者
程序沒有細看,不知道你想達到什么目的,也不知道你遇到什么問題。有2點明顯錯誤。
1.只為了相同的定時時間干嘛要開兩個定時器?只要設置標志,1個定時器可以完成N個定時時間。
2.這個延時函數void delayms(uint xms)只適合12T單片機,11.0592MHz 1T環境要改為:
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=829;j>0;j--);
}
回復

使用道具 舉報

地板
ID:217075 發表于 2021-3-18 16:05 | 只看該作者
sout,xout分別控制2路可控硅,實現加熱爐的強弱檔控制,強檔可控硅始終導通,弱檔可控硅斷續導通,定時器T0確定弱檔時的周期t0,T2確定占空比t1/t0,每路兩個按鈕,開關和強弱選擇
回復

使用道具 舉報

5#
ID:213173 發表于 2021-3-18 22:02 | 只看該作者
hsujinshan 發表于 2021-3-18 16:05
sout,xout分別控制2路可控硅,實現加熱爐的強弱檔控制,強檔可控硅始終導通,弱檔可控硅斷續導通,定時器T0 ...

這種簡單控制不用寫得那么啰嗦。定時器也不必非得50ms,用最大值約71ms不影響占空比,用鍵控制占空比可以由全開到關斷,如不用數碼管顯示占空比就用LED閃亮時間觀察占空比。修改如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sfr AUXR = 0x8E; //STC15W特殊寄存器定義

  5. //sbit sqr=P1^3; //輸出強弱選擇按鍵1
  6. //sbit skg=P1^2; //輸出開關鍵1,打開進入強輸出狀態
  7. //sbit xqr=P1^5; //輸出強弱選擇按鍵2
  8. //sbit xkg=P1^4; //輸出開關鍵2,同1

  9. sbit sout=P1^1;        //輸出1
  10. sbit xout=P3^0;        //輸出2
  11. sbit sled=P3^7;  //輸出1強/弱發光二極管顯示
  12. //sbit sr=P3^6;  //輸出1弱發光二極管顯示
  13. sbit xled=P3^1;  //輸出2強/弱發光二極管顯示
  14. //sbit xr=P3^2;  //輸出2弱發光二極管顯示

  15. uchar num;        //鍵值變量
  16. uchar num1; //中斷計數1變量
  17. uchar num2; //中斷計數2變量
  18. uchar scan; //占空比1變量
  19. uchar xcan; //占空比2變量

  20. void delayms(uint xms)//@11.0592MHz/1T
  21. {
  22.         uint i,j;
  23.         for(i=xms;i>0;i--)
  24.                 for(j=829;j>0;j--);
  25. }

  26. void keyscan()
  27. {
  28.         static uchar count=0;//靜態計數變量
  29.         static bit sign=0;        //靜態標志位
  30.         num=(P1&0x3c)>>2;                //按鍵P1.2~1.5
  31.         if(num!=0x0f)        //有鍵按下
  32.         {
  33.                 if(++count>=10 && sign==0)//10ms消抖
  34.                 {
  35.                         sign=1;                //記憶鍵態
  36.                         switch(num)
  37.                         {
  38.                                 case 0x0e: if(scan<10)scan++; break;//輸出1占空比+
  39.                                 case 0x0d: if(scan>0)scan--; break;//輸出1占空比-
  40.                                 case 0x0b: if(xcan<10)xcan++; break;//輸出2占空比+
  41.                                 case 0x07: if(xcan>0)xcan--; break;//輸出2占空比-
  42.                                 default: break;
  43.                         }
  44.                 }
  45.         }
  46.         else  //松手
  47.         {
  48.                 count=0;//計數清0
  49.                 sign=0; //
  50.         }
  51. }
  52. void main()
  53. {
  54.         AUXR &= 0x7F;                //定時器時鐘12T模式
  55.         TMOD &= 0xF0;                //設置定時器模式
  56.         TMOD |= 0x01;                //設置定時器模式
  57.         TH0=0x00;//(65535-45872)/256;
  58.         TL0=0x00;//(65535-45872)%256;
  59.         EA=1;
  60.         ET0=1;
  61.         TR0=1;
  62.         while(1)       
  63.         {
  64.                 keyscan(); //按鍵掃描
  65.                 delayms(1);//控制主循環周期約1ms
  66.         }
  67. }

  68. void T0time() interrupt 1
  69. {
  70. //        初值0x0000 71~72ms
  71. //        TH0=(65535-45872)/256; //50ms初值
  72. //        TL0=(65535-45872)%256;
  73.         if(num1<scan){sout=0;sled=0;}
  74.         else {sout=1;sled=1;}
  75.         num1=++num1%10;

  76.         if(num2<xcan){xout=0;xled=0;}
  77.         else {xout=1;xled=1;}
  78.         num2=++num2%10;
  79. }
復制代碼

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:217075 發表于 2021-3-19 08:19 | 只看該作者
多謝這位老師
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲国产一区二区三区 | 人人干人人玩 | 一区在线播放 | 亚洲精品一二三 | 91日韩在线 | 激情三区| 精品在线一区 | 久草成人| 第四色影音先锋 | 国产综合精品 | 91视视频在线观看入口直接观看 | 国产精品久久国产精品 | 欧美三区在线观看 | 欧美日韩在线观看视频网站 | 日韩毛片免费看 | 久久最新精品视频 | 粉色午夜视频 | 在线观看 亚洲 | 在线观看国产三级 | 人干人操 | 毛片网站免费观看 | 久久亚| 欧美一区二区在线播放 | 91精品国产一区二区三区 | 久久久久无码国产精品一区 | 精品久久久久久 | 亚洲一二三区在线观看 | 国产一级视频在线播放 | 国产在线精品一区二区 | 91色视频在线观看 | 日本高清视频在线播放 | 99日韩 | 日韩欧美一区二区在线播放 | 黄色网一级片 | 国内自拍偷拍一区 | 日韩精品人成在线播放 | 久久九九99 | 日本不卡一区二区 | 97avcc | 久久精品91久久久久久再现 | 91精品国产一区二区 |