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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

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


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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

地板
ID:217075 發(fā)表于 2021-3-18 16:05 | 只看該作者
sout,xout分別控制2路可控硅,實(shí)現(xiàn)加熱爐的強(qiáng)弱檔控制,強(qiáng)檔可控硅始終導(dǎo)通,弱檔可控硅斷續(xù)導(dǎo)通,定時(shí)器T0確定弱檔時(shí)的周期t0,T2確定占空比t1/t0,每路兩個(gè)按鈕,開關(guān)和強(qiáng)弱選擇
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2021-3-18 22:02 | 只看該作者
hsujinshan 發(fā)表于 2021-3-18 16:05
sout,xout分別控制2路可控硅,實(shí)現(xiàn)加熱爐的強(qiáng)弱檔控制,強(qiáng)檔可控硅始終導(dǎo)通,弱檔可控硅斷續(xù)導(dǎo)通,定時(shí)器T0 ...

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

  5. //sbit sqr=P1^3; //輸出強(qiáng)弱選擇按鍵1
  6. //sbit skg=P1^2; //輸出開關(guān)鍵1,打開進(jìn)入強(qiáng)輸出狀態(tài)
  7. //sbit xqr=P1^5; //輸出強(qiáng)弱選擇按鍵2
  8. //sbit xkg=P1^4; //輸出開關(guān)鍵2,同1

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

  15. uchar num;        //鍵值變量
  16. uchar num1; //中斷計(jì)數(shù)1變量
  17. uchar num2; //中斷計(jì)數(shù)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;//靜態(tài)計(jì)數(shù)變量
  29.         static bit sign=0;        //靜態(tài)標(biāo)志位
  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;                //記憶鍵態(tài)
  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;//計(jì)數(shù)清0
  49.                 sign=0; //
  50.         }
  51. }
  52. void main()
  53. {
  54.         AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式
  55.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  56.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  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);//控制主循環(huán)周期約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. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区不卡 | 日韩在线精品视频 | 国产精品精品久久久 | 国产中文字幕在线观看 | 精品一区av | 精品国产99 | 91久久精品一区二区三区 | 国产精品九九九 | 欧美日韩大片 | 嫩草一区二区三区 | 啪一啪 | 亚洲国产成人在线视频 | 国产免费av网 | 国产精品欧美一区二区三区不卡 | 久久99精品久久久久 | 91大神在线看| 污免费网站 | 中文字幕在线视频免费视频 | 操操操日日日 | 成人午夜电影在线观看 | 国产精品久久久久久二区 | 午夜精品一区二区三区在线视频 | 日韩欧美在线观看 | 精品1区 | 99久久婷婷国产综合精品 | 久久精品99久久 | 99热欧美| 国产精品一区二区在线 | 日韩欧美1区2区 | 国产精品高潮呻吟久久av黑人 | 国产亚洲一区二区三区 | 欧美日韩精品一区二区三区视频 | 操人网站 | 中文字幕国产第一页 | 精品在线播放 | 久久一及片 | 日本久久久久久久久 | 精品欧美| 亚洲视频在线免费观看 | 国产精品视频网 | va精品 |