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

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

QQ登錄

只需一步,快速開始

搜索
查看: 2342|回復(fù): 11
收起左側(cè)

神奇的事情,用STC15W204S單片機(jī)做的程序,按加速鍵200多次程序才能正常 請(qǐng)高人指點(diǎn)迷津

[復(fù)制鏈接]
ID:879080 發(fā)表于 2022-3-3 16:46 | 顯示全部樓層 |閱讀模式
#include <REG51.H>
#include <intrins.h>
#define uchar unsigned char   
#define uint unsigned int
//#define  led P1

sfr     IAP_DATA    =   0xC2;
sfr     IAP_ADDRH   =   0xC3;
sfr     IAP_ADDRL   =   0xC4;
sfr     IAP_CMD     =   0xC5;
sfr     IAP_TRIG    =   0xC6;
sfr     IAP_CONTR   =   0xC7;

unsigned char RunMode;

void  cc(uint addr);
void  xcx(uint addr,uchar dat);
uchar dcx(uint addr);
void  Q0();

sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;


/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):擦除某一扇區(qū)(每個(gè)扇區(qū)512字節(jié))
入口:addr = 某一扇區(qū)首地址         
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void cc(uint addr)// 0x83(晶振<5M)   0x82(晶振<10M)   0x81(晶振<20M)   0x80(晶振<40M)
{
    IAP_CONTR = 0x81;
    //IAP_TPS = 12;

    IAP_CMD   = 3;         
    IAP_ADDRL = addr;         
    IAP_ADDRH = addr>>8;      
        EA =0;   
    IAP_TRIG = 0x5a;         
    IAP_TRIG = 0xa5;         
    _nop_();
    Q0();        
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):寫一字節(jié)
入口:addr = 扇區(qū)單元地址 , dat = 待寫入數(shù)據(jù)
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void xcx(uint addr,uchar dat)
{
    IAP_CONTR = 0x81;
  //IAP_TPS = 12;         
    IAP_CMD   = 2;            
    IAP_ADDRL = addr;        
    IAP_ADDRH = addr>>8;      
    IAP_DATA  = dat;         
    EA = 0;
    IAP_TRIG = 0x5a;         
    IAP_TRIG = 0xa5;         
    _nop_();
    Q0();         // 關(guān)閉ISP/IAP
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):讀一字節(jié)
入口:addr = 扇區(qū)單元地址
出口:dat  = 讀出的數(shù)據(jù)
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
uchar dcx(uint addr)
{   
    uchar dat;
        IAP_CONTR = 0x81;
  //IAP_TPS = 12;        
    IAP_CMD   = 1;         // 用戶可以對(duì)"Data Flash/EEPROM區(qū)"進(jìn)行字節(jié)讀
    IAP_ADDRL = addr;         
    IAP_ADDRH = addr>>8;      
    EA = 0;
    IAP_TRIG = 0x5a;         
    IAP_TRIG = 0xa5;         
    _nop_();
    dat = IAP_DATA;         // 取出數(shù)據(jù)
        Q0();         // 關(guān)閉ISP/IAP         
        return dat;
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):關(guān)閉ISP/IAP操作
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Q0()
{
    IAP_CONTR = 0;            // 關(guān)閉IAP功能
    IAP_CMD   = 0;            // 待機(jī)模式,無ISP操作
    IAP_TRIG  = 0;
        IAP_ADDRH=0x80;
        IAP_ADDRL=0;
        EA =1;            // 關(guān)閉IAP功能, 清與ISP有關(guān)的特殊功能寄存器
}
void  Delay1ms(unsigned int count)
{
        unsigned int i,j;
        for(i=0;i<count;i++)
                for(j=0;j<120;j++);
}
uchar code led0[]={0xd6,0xd5,0xd3,0xce,0xcd,0xcb,
                                   
                                        };
uchar code led1[]={0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,
                                   0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,0xf8,0xff,
                                   0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,
                                   0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,0xc7,0xff,
                                        };

uchar code led2[8]={0xde,0xdd,0xdb,0xd7,0xee,0xed,0xeb,0xe7};
uchar code led3[28]={0xde,0xdc,0xe8,0xe0,0xd0,0xd0,0xe0,0xe0,0xdf,0xdf,0xee,0xec,
                                        0xd8,0xd0,0xe0,0xe0,0xd0,0xdf,0xef,0xee,0xdc,0xd8,0xe0,0xe0,
                                        0xd0,0xd0,0xef,0xef,
                                        };
uchar code led4[90]={0xce,0xcd,0xcb,0xf6,0xf5,0xf3,0xce,0xcd,0xcb,0xf6,0xf5,0xf3,
                                   0xce,0xcd,0xcb,0xf6,0xf5,0xf3,0xce,0xcd,0xcb,0xf6,0xf5,0xf3,
                                   0xce,0xcd,0xcb,0xf6,0xf5,0xf3,0xcb,0xcd,0xce,0xf3,0xf5,0xf6,

                                        0xcb,0xcd,0xce,0xf3,0xf5,0xf6,0xcb,0xcd,0xce,0xf3,0xf5,0xf6,
                                        0xcb,0xcd,0xce,0xf3,0xf5,0xf6,0xcb,0xcd,0xce,0xf3,0xf5,0xf6,
                                        0xcf,0xcf,0xcf,0xf0,0xf0,0xf0,0xcf,0xcf,0xcf,0xf0,0xf0,0xf0,
                                        0xcf,0xcf,0xcf,0xf0,0xf0,0xf0,0xcf,0xcf,0xcf,0xf0,0xf0,0xf0,
                                        0xcf,0xcf,0xcf,0xf0,0xf0,0xf0,
                                        };
uchar code led5[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xde,0xdd,0xdb,0xd7,0xcf
                                        };

uchar code led6[12]={0xde,0xdc,0xd8,0xf0,0xe0,0xe0,0xc0,0xc0,0xc0,0xe0,0xff,0xff};
uchar code led7[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar code led8[12]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,0xff,0xff};
uchar code led9[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xef,0xf7,0xfb,0xfd,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xc1,0xc2,0xc4,0xc8,0xd0,0xe0,0xd0,0xc8,0xc4,0xc2,
                                        0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,
                                        0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,
                                        0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x00,0x00,
                                   };
unsigned char GetKey(void)
{
        unsigned char KeyTemp,CheckValue,Key = 0x00;
        CheckValue = P3&0x4c;
        if(CheckValue==0x4c)
                return 0x00;
        Delay1ms(10);
        KeyTemp = P3&0x4c;
        if(KeyTemp==CheckValue)
                return 0x00;

        if(!(CheckValue&0x04))
                Key|=0x01;
        if(!(CheckValue&0x08))
                Key|=0x02;
        if(!(CheckValue&0x40))
                Key|=0x04;
        return Key;
}

unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
void InitialTimer0(void)
{

    TMOD=0x01;
        TH0=(65536-3000)/256;
        TL0=(65536-3000)%256;
        
        ET0=1;
        TR0=1;                  
    EA = 1;
        
}

unsigned int code SpeedCode[]={5,   8,  10,  14,  17,  20,  30,
                               40,  50,  60,  70,  80,  90, 100, 120, 140, 160,
                              180, 200,300,400,500,600,700,800,900,1000};//27
void SetSpeed(unsigned char Speed)
{
         SystemSpeed =SpeedCode[Speed];
}

void LEDShow(unsigned int LEDStatus)
{
        P1 = LEDStatus;
}

void InitialCPU(void)
{
               
        RunMode = dcx(0x0000);
        TimerCount = 0;
        SystemSpeedIndex = dcx(0x0200);
                 // SystemSpeedIndex = 10;
               
        P3 = 0xff;
        Delay1ms(500);
        //P1 = 0xff;
        P3 = 0xFF;
                 
       SetSpeed( SystemSpeedIndex);
}
//Mode 0
unsigned int num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,LEDIndex = 0;
bit LEDDirection=1 ,LEDFlag=1 ;

void Mode_0(void)
{
        LEDShow(LEDIndex=led0[num0]);
        num0++;
                if(num0==6)
        {
                num0=0;
               
}
}
//Mode 1
void Mode_1(void)
{        
        LEDShow(LEDIndex=led1[num1]);
                num1++;
         if(num1==48)
{
        num1=0;

}
}
//Mode 2
void Mode_2(void)
{
        LEDShow(LEDIndex=led2[num2]);
                num2++;
         if(num2==8)
{
        num2=0;

}
}
//Mode 3
void Mode_3(void)
{
        LEDShow(LEDIndex=led3[num3]);
                num3++;
         if(num3==28)
{
        num3=0;

}
}
void Mode_4(void)
{
        LEDShow(LEDIndex=led4[num4]);
                num4++;
         if(num4==90)
{
                num4=0;

}
}
void Mode_5(void)
{
  LEDShow(LEDIndex=led5[num5]);
                num5++;
         if(num5==10)
{
                num5=0;

}
}
void Mode_6(void)
{
                LEDShow(LEDIndex=led6[num6]);
                num6++;
         if(num6==12)
{
                num6=0;

}        
}
void Mode_7(void)
{
                LEDShow(LEDIndex=led7[num7]);
                num7++;
         if(num7==6)
{
                num7=0;

}
}
void Mode_8(void)                                
{
                LEDShow(LEDIndex=led8[num8]);
                num8++;
         if(num8==12)
{
                num8=0;

}

}
void Mode_9(void)                              
{
                LEDShow(LEDIndex=led9[num9]);
                num9++;
         if(num9==236)
{
                num9=0;

}

}
void TimerEventRun(void)
{

        if(RunMode==0x00)
        {
                Mode_0();        
        }
        else if(RunMode ==0x01)
        {
                Mode_1();
        }
       else if(RunMode ==0x02)
        {
                Mode_2();
        }
        else if(RunMode ==0x03)
        {
                Mode_3();
        }
        else if(RunMode ==0x04)
        {
                Mode_4();
        }
                else if(RunMode ==0x05)
        {
                Mode_5();
        }
                else if(RunMode ==0x06)
        {
                Mode_6();
        }
        else if(RunMode ==0x07)
        {
                Mode_7();
        }
        else if(RunMode ==0x08)
        {
                Mode_8();
        }
                else if(RunMode ==0x09)
        {
                Mode_9();
        }
}

void Timer0(void) interrupt 1 using 1
{
                TH0=(65536-3000)/256;
                TL0=(65536-3000)%256;
                    
        if(++TimerCount>=SystemSpeed)
        {
                                TimerCount = 0;
                                TimerEventRun();
                                 
}
               
}        

unsigned int MusicIndex=1 ;
void KeyDispose(unsigned char Key)
{
               
                                
        if(Key&0x01)
        {
                LEDDirection = 1;
                LEDIndex = 0;
                LEDFlag = 1;
                RunMode = (RunMode+1)%10;
                            cc(0x0000);           
                                    xcx(0x0000, RunMode);
        }
                                 
                                
                        
        if(Key&0x02)
        {
                if(SystemSpeedIndex>0)
                {
                        --SystemSpeedIndex;
                                                SetSpeed(SystemSpeedIndex);
                                            cc(0x0200);
                                     xcx(0x0200,SystemSpeedIndex);
                                       
                                }        
                                
                }
                                       

        if(Key&0x04)
        {
                if(SystemSpeedIndex<26)
                {
                        ++SystemSpeedIndex;
                        SetSpeed(SystemSpeedIndex);
                                        cc(0x0200);
                                     xcx(0x0200,SystemSpeedIndex);
                                                
                }
                                                               
        }  
                                                                        
                                                                                                                                                                                                      
}

//***********************************************************************************
void main()
{
                unsigned char Key ;
                P1M0 = 0x00;
                   P1M1 = 0x00;
                //P3M0 = 0x00;
            //P3M1 = 0x00;
               
        InitialCPU();
        InitialTimer0();
               

        while(1)
        {
                Key = GetKey();

                if(Key!=0x00)
                {
                        KeyDispose(Key);
                }
        }
}


回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2022-3-3 20:36 | 顯示全部樓層
很認(rèn)真地看完了程序,竟然沒看出哪個(gè)是加速鍵、在哪里加速、200多次后正常是否能上高速 ......
回復(fù)

使用道具 舉報(bào)

ID:86926 發(fā)表于 2022-3-4 08:32 | 顯示全部樓層
可能是上電后void InitialCPU(void)中的SetSpeed( SystemSpeedIndex);前沒有初始化SystemSpeedIndex;讀到的內(nèi)部數(shù)據(jù)是0xff就拿來用了
回復(fù)

使用道具 舉報(bào)

ID:879080 發(fā)表于 2022-3-4 09:10 | 顯示全部樓層
man1234567 發(fā)表于 2022-3-3 20:36
很認(rèn)真地看完了程序,竟然沒看出哪個(gè)是加速鍵、在哪里加速、200多次后正常是否能上高速 ......

     if(Key&0x02)
        {
                if(SystemSpeedIndex>0)
                {
                        --SystemSpeedIndex;
                                                SetSpeed(SystemSpeedIndex);
                                            cc(0x0200);
                                     xcx(0x0200,SystemSpeedIndex);
                                       
                                }        
                                
                }
按這個(gè)按鍵200多次后程序才能正常運(yùn)行
回復(fù)

使用道具 舉報(bào)

ID:879080 發(fā)表于 2022-3-4 09:18 | 顯示全部樓層
本帖最后由 hanxingyijian 于 2022-3-4 09:20 編輯
藍(lán)魄 發(fā)表于 2022-3-4 08:32
可能是上電后void InitialCPU(void)中的SetSpeed( SystemSpeedIndex);前沒有初始化SystemSpeedIndex;讀到 ...

當(dāng)我用STC12C2052AD單片機(jī)的時(shí)候,下載第2次程序就能正常工作(當(dāng)然要改擦寫寄存器和相應(yīng)的命令,程序不改)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-3-4 09:36 | 顯示全部樓層
hanxingyijian 發(fā)表于 2022-3-4 09:10
if(Key&0x02)
        {
                if(SystemSpeedIndex>0)

功能似乎很簡(jiǎn)單,洋洋灑灑一大堆代碼寫的很復(fù)雜,看著頭大。你把具體的功能要求講清楚才好判斷。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-3-4 12:29 | 顯示全部樓層
藍(lán)魄 發(fā)表于 2022-3-4 08:32
可能是上電后void InitialCPU(void)中的SetSpeed( SystemSpeedIndex);前沒有初始化SystemSpeedIndex;讀到 ...

同意,應(yīng)加上判斷程序以防讀錯(cuò)地址
  1. void InitialCPU(void)
  2. {
  3.                
  4.         RunMode = dcx(0x0000);
  5.         TimerCount = 0;
  6.         SystemSpeedIndex = dcx(0x0200);
  7.                 if(SystemSpeedIndex > 26)
  8.                 {
  9.                         SystemSpeedIndex = 10;
  10.                 }
  11.                
  12.         P3 = 0xff;
  13.         Delay1ms(500);
  14.         //P1 = 0xff;
  15.         P3 = 0xFF;
  16.                  
  17.        SetSpeed( SystemSpeedIndex);
  18. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-3-4 13:12 | 顯示全部樓層
要在我們公司,代碼注釋寫成這樣, 頭都給你錘爆
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-3-4 13:57 | 顯示全部樓層
證明一下,你按的200多次,每次都被程序“收到”了。
提示:設(shè)整個(gè)程序執(zhí)行時(shí)間是100,其中讀鍵程序發(fā)生在50-70之間,這時(shí)只有在50-70之間發(fā)生的按鍵才被認(rèn)可。
回復(fù)

使用道具 舉報(bào)

ID:879080 發(fā)表于 2022-3-4 15:09 | 顯示全部樓層
lkc8210 發(fā)表于 2022-3-4 12:29
同意,應(yīng)加上判斷程序以防讀錯(cuò)地址

按您的方法問題解決了。多謝指導(dǎo)。我想增加一個(gè)P1口漸亮漸滅的程序。卻不知道能不能實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

ID:879080 發(fā)表于 2022-3-4 15:12 | 顯示全部樓層
天ノ憶 發(fā)表于 2022-3-4 13:12
要在我們公司,代碼注釋寫成這樣, 頭都給你錘爆

見諒!我是個(gè)剛步入單片機(jī)應(yīng)用大門的小白,有很多問題還需要跟師傅們學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

ID:879080 發(fā)表于 2022-3-4 15:27 | 顯示全部樓層
wulin 發(fā)表于 2022-3-4 09:36
功能似乎很簡(jiǎn)單,洋洋灑灑一大堆代碼寫的很復(fù)雜,看著頭大。你把具體的功能要求講清楚才好判斷。

主要是我剛學(xué)習(xí),想做個(gè)有趣的練練,功能是三個(gè)按鍵控制6路輸出,一個(gè)按鍵調(diào)花樣,另外2個(gè)按鍵調(diào)快慢。稍微復(fù)雜點(diǎn)的都無從下手。如果讓熟練的師傅們寫程序,代碼估計(jì)可以少很多。感謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频网站 | 成人在线视频免费观看 | 久久久久久久久久久国产 | 91久久夜色精品国产网站 | 国产精品久久久 | 每日更新av | 日本不卡一区二区三区在线观看 | 狠狠草视频 | 9porny九色视频自拍 | 国产乱码精品一区二三赶尸艳谈 | 久久精品网 | 精品日韩一区二区 | 精品一二三区视频 | 99亚洲精品 | 久久久女| 中文字幕免费视频 | 国产高清在线观看 | 中文字幕av中文字幕 | 国内精品视频免费观看 | 欧美理论片在线观看 | 日韩欧美在线一区 | www.yw193.com| 午夜天堂精品久久久久 | 国产毛片视频 | 久久亚洲国产 | 欧美自拍一区 | 成人 在线 | 成人a免费 | 欧洲一区二区视频 | 欧美亚洲日本 | av网站观看 | 日韩毛片 | 一区在线视频 | 三级免费av | 国产精品久久久久久久午夜片 | 免费一区二区三区在线视频 | 国产电影一区二区在线观看 | 91视频在线 | 精品亚洲一区二区三区四区五区 | 在线视频一区二区三区 | 国产九九九九 |