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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助大神這個程序怎樣寫入STC15F104W里面才能正常工作

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:202586 發(fā)表于 2017-7-9 23:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
因水平有限求大神師傅們幫幫忙怎樣修改才能在15F104W中正常運行,小女子先謝謝各位師傅了。
程序要求      
一鍵控制個LED燈   分三段
一段:按第一次按鍵開機 LED1.LED4燈點亮,1小時后,關(guān)閉LED1,延時5秒后,并點亮LED2,1分20秒后關(guān)閉LED2,停5秒后,再點亮LED3,5秒并關(guān)閉,同時關(guān)閉LED1燈,進入待機;大概1小時后,再循環(huán)一段,如沒有斷電一直循環(huán),直到按第二次按鍵。
二段:按第二次按鍵 LED1,LED5燈點亮,,一直點亮,直到按第三次按鍵。
三段:按第三次按鍵 LED5燈還亮著 并點亮LED2,1分20秒后關(guān)閉LED2,停5秒后,再點亮LED3,5秒并關(guān)閉,同時關(guān)閉LED5燈,進入關(guān)機狀態(tài),等待下次開機。        如果連續(xù)按按鍵也要安這3段進行
下面是80C52調(diào)試程序
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar second,minute,hour,count,timer1,cout,a;
  5. uchar second1,minute1,hour1,count1;
  6. sbit K1 =P3^2;    //按鍵
  7. sbit led1 =P2^0;  
  8. sbit led2 =P2^1;  
  9. sbit led3 =P2^2;  
  10. sbit led4 =P2^3;  
  11. sbit led5 =P2^4;  
  12. bit  m_flag,h_flag,flash_flag,open_flag,close_flag;
  13. //=====================================================================
  14. void Delay(uint k)        //12M 10ms延時程序
  15.   {
  16.    uint i;
  17.    for(;k>0;k--)
  18.    for(i=0;i<20;i++)
  19.    {;}
  20.   }   
  21. //=====================================================
  22. void Timer0_init(void)//12M 50ms定時程序
  23.   {
  24.     TMOD &= 0xF0;        //設(shè)置定時器模式
  25.     TMOD |= 0x01;        //設(shè)置定時器模式
  26.     TL0 = 0xB0;        //設(shè)置定時初值
  27.     TH0 = 0x3C;        //設(shè)置定時初值
  28.     EA=1;           // 開總中斷
  29.     ET0=1;           //允許T0中斷
  30.     TF0 = 0;        //清除TF0標志
  31.     TR0 = 0;         //開啟定時T0
  32.        PT0=1;
  33.   }   
  34. //====================================================================
  35. void Timer0_int(void)interrupt 1
  36. {
  37.        TL0 = 0xB0;        //設(shè)置定時初值
  38.     TH0 = 0x3C;        //設(shè)置定時初值
  39.      count++;
  40.      if(count==20)//1s到   
  41.        {   
  42.           count=0;   
  43.           second++;   
  44.        }
  45.        if(second==60)//1分鐘到   
  46.        {   
  47.            second=0;   
  48.            minute++;   
  49.        }
  50.        if(minute==60)//1小時到   
  51.        {   
  52.            minute=0;   
  53.            hour++;   
  54.        }
  55.        if(hour==24)//24小時到   
  56.        {   
  57.            hour=0;   
  58.        }
  59. }
  60. //==============================================================================
  61. void IrInit()
  62. {
  63.     IT0=1;//下降沿觸發(fā)    IT0=0;時為低電有效
  64.     EX0=1;//打開中斷0允許
  65.     EA=1;    //打開總中斷


  66.     K1=1;//初始化端口
  67. }
  68. //===============================================================================
  69. void Timer1_init(void)//12M 0.1ms定時程序
  70.   {
  71.     TMOD &= 0x0F;        //設(shè)置定時器模式
  72.     TMOD |= 0x10;        //設(shè)置定時器模式
  73.     TL1 = 0x58;        //設(shè)置定時初值
  74.     TH1 = 0x9E;        //設(shè)置定時初值
  75.     EA=1;           // 開總中斷
  76.     ET1=1;           //允許T0中斷
  77.     TF1 = 0;        //清除TF0標志
  78.     TR1 = 0;         //開啟定時T0
  79.        PT1=1;
  80.   }   
  81. //=================================================================
  82. void Timer1_int(void)interrupt 3
  83. {
  84.        TL1 = 0x58;        //設(shè)置定時初值
  85.     TH1 = 0x9E;        //設(shè)置定時初值
  86.      count1++;
  87.      if(count1==40)//1s到   
  88.        {   
  89.           count1=0;   
  90.           second1++;   
  91.        }
  92.   
  93. }
  94. //=====================================================================


  95. void key_scan() interrupt 0
  96. {
  97.    if(K1==0)
  98.    {
  99.    Delay(15);
  100.    if (K1==0)
  101.    {
  102.    while(!K1);
  103.    a++;                     
  104.    if(a==4){a=0;}
  105.    }
  106.    }


  107. }
  108. //===================================================================================
  109. void main()
  110.   {                                                
  111.     Timer0_init();
  112.     Timer1_init();
  113.     IrInit();
  114.     m_flag=0;
  115.     h_flag=0;
  116.     flash_flag=0;
  117.     cout=0;
  118.     a=0;
  119.     led1=1;
  120.     led2=1;
  121.     led3=1;
  122.     led4=1;
  123.     led5=1;
  124.      second1=0;
  125.      minute1=0;
  126.      hour1=0;
  127.      second=0;
  128.      minute=0;
  129.      hour=0;                     
  130.      open_flag=0;
  131.      close_flag=0;
  132.      count=0;
  133.      count1=0;
  134.        K1 =1;


  135.     while(1)  
  136.    {
  137.      if(a==0)
  138.       {
  139.      
  140.        TR0 = 0;
  141.        TR1 = 0;                                                                                                                                                                                                                                                   
  142.       second=0;minute=0;hour=0;
  143.        second1=0;minute1=0;hour1=0;
  144.       }
  145.        if(a==1)
  146.        {
  147.         close_flag=0;
  148.          second1=0;minute1=0;hour1=0;
  149.        TR0 = 1;
  150.        if(flash_flag==0)
  151.     {
  152.        if(m_flag==0)
  153.             {
  154.          led5=1;
  155.          led2=1;         
  156.          led1=0; //開LED1
  157.          led4=0;   //開LED4燈
  158.          }
  159.          if(second==7){    m_flag=1;led1=1;led2=0;} //1小時后關(guān)LED1開LED2.
  160.          if(hour==6){led1=1;led2=0;}        //1分50秒后    關(guān)LED1開LED2   
  161.          if((minute==1)&&(second==30)&&(hour==6)){led1=1;led2=1;led3=0;} //停5秒開LED3
  162.         if((minute==1)&&(second==37)&&(hour==6)){led1=1;led2=1;led3=1;led4=0;led5=1;h_flag=0;flash_flag=1;}     //進入關(guān)LED3代機
  163.             
  164.     }
  165.          if( minute==1){m_flag=0;flash_flag=0; second=0;minute=0;hour=0;}    //1小時后 復來


  166.        }
  167.       
  168.        if(a==2)
  169.        {
  170.        TR0 = 0;
  171.        TR1 = 0;
  172.        m_flag=0;flash_flag=0;
  173.        second=0;minute=0;hour=0;
  174.        second1=0;minute1=0;hour1=0;
  175.        led2=1;
  176.        led4=1;
  177.        led3=1;
  178.         m_flag=1;flash_flag=1;
  179.         led5=0;        //亮LED5
  180.         led1=0;       //點亮LED1
  181.             
  182.        }
  183.        if(a==3)
  184.        {  // close_flag=0;
  185.            open_flag=0;
  186.            TR1 = 1;
  187.            TR0 = 0;
  188.           second=0;minute=0;hour=0;   
  189.           led1=1;
  190.           led3=1;
  191.           led4=1;
  192.          m_flag=0;flash_flag=0;


  193.         if(open_flag==0)
  194.         {      
  195.         if(close_flag==0)    { led2=0;led5=0; }
  196.         if(second1==90){close_flag=1;led1=1;led4=1; led3=1;led2=1;led5=0;}        
  197.         if(second1==95)    {    led1=1;    led4=1;    led3=0;led5=0;led2=1;} //    1分50秒關(guān)LED2
  198.         if(second1==100){    led1=1; led2=1;    led4=1;led5=0;led3=1;} //    5秒后開LED3
  199.          if(second1==105)     {a=0;    led1=1;led3=1;led4=1;led5=1; TR1 = 0;second1=0;minute1=0;hour1=0;TR0 = 0;second=0;minute=0;hour=0;open_flag=1;    }
  200.         
  201.             }
  202.       
  203.               }
  204.                        
  205.        }
  206.      
  207.                      
  208. }
復制代碼


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

使用道具 舉報

沙發(fā)
ID:82765 發(fā)表于 2017-7-10 08:00 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2017-7-10 08:12 | 只看該作者
如果這個程序在80C52調(diào)試正常只要做少許調(diào)整就可以直接用于15F104W。兩者區(qū)別如下:
15F104W的I/O口只有6個,P3.0~P3.5,除了保留K1=P3^2外,其他5個LED任意定義。
15F104W只有定時器0和定時器2,沒有定時器1,只要重新設(shè)置定時器即可。
15F104W是1T單片機,軟件延時Delay要修改。經(jīng)驗程序如下
/*--------------------------------------------
  1ms延時子程序(12MHz 1T)
---------------------------------------------*/
void delay1ms(uint k)       
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=892;j>0;j--);
}
回復

使用道具 舉報

地板
ID:213173 發(fā)表于 2017-7-10 08:55 | 只看該作者
建議這里修改一下:
if(a==0)
{       
        TR0 = 0;
        TR1 = 0;
        second=0;minute=0;hour=0;
        second1=0;minute1=0;hour1=0;
        led1=led2=led3=led4=led5=1;//在這里加上,否則連續(xù)按鍵4次LED不能清0
}
回復

使用道具 舉報

5#
ID:96072 發(fā)表于 2017-7-11 20:19 | 只看該作者
建議這里修改一下: if(a==0) {                 TR0 = 0;                 second=0;minute=0;hour=0;         second1=0;minute1=0;hour1=0;         led1=led2=led3=led4=led5=1;//在這里加上,否則連續(xù)按鍵4次LED不能清0 }
回復

使用道具 舉報

6#
ID:202586 發(fā)表于 2017-7-12 09:15 | 只看該作者
wulin 發(fā)表于 2017-7-10 08:55
建議這里修改一下:
if(a==0)
{       

不好意思這幾天不在家,沒有及時回復你們,抱歉  謝謝你們的指點,我剛試了一下,可以寫進去了,按鍵能點亮相應(yīng)的LED  但不能定時,15F104W的不會設(shè)計定時,請大家多多關(guān)照
回復

使用道具 舉報

7#
ID:213173 發(fā)表于 2017-7-12 14:20 | 只看該作者
學徒工--靜 發(fā)表于 2017-7-12 09:15
不好意思這幾天不在家,沒有及時回復你們,抱歉  謝謝你們的指點,我剛試了一下,可以寫進去了,按鍵能點 ...

建議按鍵程序放在main()里,不要放在外部中斷,定時器也就不必設(shè)置中斷優(yōu)先級,如果程序再優(yōu)化一下,只用定時器0就行。
//定時器0初始化 12T自動重載(中斷中不需重置T0H和T0L)
void Timer0_Init(void)                //50毫秒@12.000MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TL0 = 0xB0;                        //設(shè)置定時初值
        TH0 = 0x3C;                        //設(shè)置定時初值
        TF0 = 0;                        //清除TF0標志
//        TR0 = 1;                        //定時器0開始計時
        EA=1;                   //開總中斷
        ET0=1;                  //允許T0中斷
}
//定時器2初始化 12T自動重載(中斷中不需重置T2H和T2L)
void Timer2_Init(void)                //25毫秒@12.000MHz
{
        AUXR &= 0xFB;                        //定時器時鐘12T模式
        T2L = 0x58;                                //設(shè)置定時初值
        T2H = 0x9E;                                //設(shè)置定時初值
//        T2R = 1;                                //定時器2開始計時
        ET2 = 1;                                //定時器2中斷允許
}
//定時器2中斷服務(wù)程序
void Timer2_int(void) interrupt 12
{
        count1++;
        if(count1==40)//1s到   
        {   
                count1=0;   
                second1++;   
        }       
}
//按鍵掃描程序
void key_scan()   //interrupt 0
{
        if(K1==0)
        {
                Delay(15);
                if (K1==0)
                {
                        while(!K1);
                        a++;                     
                        if(a==4)
                                a=0;
                }
        }
}
回復

使用道具 舉報

8#
ID:213173 發(fā)表于 2017-7-12 14:58 | 只看該作者
本帖最后由 wulin 于 2017-7-12 16:00 編輯
學徒工--靜 發(fā)表于 2017-7-12 09:15
不好意思這幾天不在家,沒有及時回復你們,抱歉  謝謝你們的指點,我剛試了一下,可以寫進去了,按鍵能點 ...

用1個定時器處理的方法
//按鍵掃描程序,刪除void IrInit()
void key_scan()//interrupt 0
{
        if(K1==0)
        {
                Delay(15);
                if (K1==0)
                {
                        count=0;
                        count1=0;
                        a++;                     
                        if(a>=4)
                                a=0;
                        while(!K1);
                }
        }
}
/********************************/
void Timer0_Init(void)                //25毫秒@12.000MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時器16位自動重載模式
        TL0 = 0x58;                        //設(shè)置定時重載值
        TH0 = 0x9E;                        //設(shè)置定時重載值
        TF0 = 0;                        //清除TF0標志
//        TR0 = 1;                        //定時器0開始計時
        EA=1;                   //開總中斷
        ET0=1;                  //允許T0中斷
}
void Timer0_int(void) interrupt 1
{
        switch(a)
        {
                case 1:
                        count++;
                        if(count>=40)//1s到   
                        {   
                                count=0;   
                                second++;   
                        }
                        if(second>=60)//1分鐘到   
                        {   
                                second=0;   
                                minute++;   
                        }
                        if(minute>=60)//1小時到   
                        {   
                                minute=0;   
                                hour++;   
                        }
                        if(hour>=24)//24小時到   
                        {   
                                hour=0;   
                        }
                break;

                case 3:
                        count1++;
                        if(count1>=40)//1s到   
                        {   
                                count1=0;   
                                second1++;   
                        }
                break;

                default: break;
        }
}
回復

使用道具 舉報

9#
ID:202586 發(fā)表于 2017-7-13 20:14 | 只看該作者
wulin 發(fā)表于 2017-7-12 14:20
建議按鍵程序放在main()里,不要放在外部中斷,定時器也就不必設(shè)置中斷優(yōu)先級,如果程序再優(yōu)化一下,只用 ...

謝謝大師了    有空我試試  謝謝
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲bt 欧美bt 日本bt | 日日干夜夜操天天操 | 黄色免费网站在线看 | a级在线免费观看 | 成人毛片网 | 国产97在线视频 | 99精品欧美一区二区蜜桃免费 | 国产精品久久久久久久久久久久久 | 四虎成人av| 九九色九九 | 成人在线免费电影 | 精品成人一区 | 国产精品久久国产精品久久 | 蜜桃av一区二区三区 | 美女在线一区二区 | 欧美一级三级 | 精品在线视频播放 | 亚洲在线一区 | 欧美日韩中文在线 | 色综合久 | 日本不卡一区二区三区在线观看 | www.久| 成人精品一区亚洲午夜久久久 | 国产伊人久久久 | 国产精品九九九 | 一级毛片高清 | 美女二区| 久久精品一区 | 国产一区二区三区网站 | 婷婷色网 | 国产电影精品久久 | 国产午夜影院 | 久久高清 | 欧美乱码精品一区二区三区 | 亚洲一区二区免费电影 | 国产亚洲网站 | 精品欧美乱码久久久久久1区2区 | 99久久久国产精品 | 日韩精品免费视频 | 美国一级毛片a | 久久精品99 |