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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC8A8K64S4A12單片機燒錄程序成功卻不執行程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:303665 發表于 2019-4-10 15:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
例如點亮一個LED燈,給這個IO口低電平,但是LED不亮,測了IO口是高電平,程序給的是低電平。奇怪的是當斷電的瞬間那個LED會閃一下,如果程序給這個IO口高電平(即讓LED不亮),斷電的瞬間LED不會閃一下,莫非是只有斷電源的瞬間單片機執行了程序?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2019-4-10 17:16 | 只看該作者
程序有問題。
回復

使用道具 舉報

板凳
ID:424598 發表于 2019-4-10 19:27 來自手機 | 只看該作者
想解決就把代碼貼出來
回復

使用道具 舉報

地板
ID:303665 發表于 2019-4-10 21:00 | 只看該作者
ssk7793 發表于 2019-4-10 19:27
想解決就把代碼貼出來

#include "stc8.h"
#include "intrins.h"
typedef unsigned char uchar8;  // 無符號8位整型變量
typedef signed char char8;            // 有符號8位整型變量
typedef unsigned int uint16;   // 無符號32位整型變量
typedef signed int int16;            // 有符號32位整型變量
typedef unsigned long ulong32; //
typedef signed long long32;    //       

sbit start  =P4^0;
sbit stop   =P6^4;
sbit watch  =P6^5;
sbit F1_5   =P6^6;
sbit change =P6^7;

sbit led1    =P5^0;
sbit led2    =P5^1;
sbit led3    =P3^6;
sbit led4    =P3^7;
sbit led5    =P4^1;
sbit led6    =P7^0;

sbit pwm0   =P2^0;
sbit pwm1   =P2^1;
sbit pwm2   =P2^2;
sbit pwm3   =P2^3;
sbit pwm4   =P2^4;
sbit pwm5   =P2^5;

sbit LCD_RS=P7^4;
sbit LCD_RW=P7^5;
sbit LCD_EN=P7^6;

bit flag_watch0;
bit flag_watch1;
bit flag_watch2;
bit flag_watch3;
bit flag_watch4;
bit flag_watch5;

uchar8 cnt_watch;
uchar8 key_watch;
uchar8 key_stop;
uchar8 flag_Hz;
ulong32 cnt_times;
uint16 Voltage[]={0,0,0,0,0,0,0,0,0};
uint16 cnt_t0;
uint16 cnt_t1;
uint16 adc1;
uint16 adc2;
uint16 adc3;
uint16 adc4;
uint16 adc5;
uint16 adc6;

void InitADC();
uint16 adc_data(uchar8 channel);

/*----------------------------
Software delay function
----------------------------*/
void Delay20ms()                //@24.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 2;
        j = 211;
        k = 231;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void Delay()
{
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}

//忙檢測函數,判斷bit7是0,允許執行;1禁止
void Read_Busy()           
{   uchar8 i;      
    P0 = 0xff;
    LCD_RS=0;
    LCD_RW=1;
    do
    {  LCD_EN=1;
       i=P0;
       LCD_EN=0;    //使能,用完就拉低,釋放總線
    }while(i & 0x80);
}
//寫命令
void LCD_Write_Command(uchar8 com)   
{   Read_Busy();
    LCD_RS=0;
    LCD_RW=0;
    P0=com;
    LCD_EN=1;
    LCD_EN=0;   
}
//寫數據
void LCD_Write_Data(uchar8 dat)   
{     Read_Busy();
      LCD_RS=1;
      LCD_RW=0;
      P0=dat;
      LCD_EN=1;
      LCD_EN=0;
}
//初始化
void LCD_Initialise()
{
        LCD_Write_Command(0x38);
        LCD_Write_Command(0x0c);
        LCD_Write_Command(0x06);
        LCD_Write_Command(0x01);
}

void timer_int() //定時器初始化
{
        TMOD=0x00;
        TL0 = 0xC0;                //設置定時初值
        TH0 = 0x63;                //設置定時初值
        TL1 = 0xC0;                //設置定時初值
        TH1 = 0x63;                //設置定時初值
        ET0=1;
        ET1=1;
}
void INT_PWM()
{
        pwm0=0;
        pwm1=0;
        pwm2=0;
        pwm3=0;
        pwm4=0;
        pwm5=0;       
}
void key_scan()        //功能按鍵
{
        if(!start)
        {
                Delay20ms();
                if(!start)
                {
                        while(!start);
                        key_stop++;                       
                        if(key_stop==1)
                        {
                                TR0=1;
                                TR1=1;
                        }
                        if(key_stop==2)
                        {
                                TR0=0;
                                TR1=0;
                                cnt_t0=0;
                                cnt_t1=0;
                                key_stop=0;
                                INT_PWM();
                        }                                               
                }
        }
         
        if(!stop)
        {
                Delay20ms();
                if(!stop)
                {
                        while(!stop);
                        if(TR0==0)
                        cnt_times=0;
                }
        }

        if(!watch)
        {
                Delay20ms();
                if(!watch)
                {
                        while(!watch);
                        key_watch++;                       
                        if(key_watch==2)
                        {
                                key_watch=0;                               
                        }
                }
        }
        if(!F1_5)
        {
                Delay20ms();
                if(!F1_5)
                {
                        while(!F1_5);
                        flag_Hz++;
                        if(flag_Hz==1)
                        {
                                cnt_t0=0;
                                cnt_t1=0;
                                INT_PWM();
                        }
                        if(flag_Hz==2)
                        {
                                cnt_t0=0;
                                cnt_t1=0;
                                INT_PWM();
                                flag_Hz=0;
                        }               
                }       
        }
}

void led_control()
{
        adc1=adc_data(1);
        adc2=adc_data(2);
        adc3=adc_data(3);
        adc4=adc_data(4);
        adc5=adc_data(5);
        adc6=adc_data(6);
        if(adc1>2800)
        {
                led1=0;
                led6=1;
        }
        if(adc2>2800)
        {
                led2=0;
                led1=1;
        }
        if(adc3>2800)
        {
                led3=0;
                led2=1;
        }
        if(adc4>2800)
        {
                led4=0;
                led3=1;
        }
        if(adc5>2800)
        {
                led5=0;
                led4=1;
        }
        if(adc6>2800)
        {
                led6=0;
                led5=1;
        }
}
void pwm0_watch_1Hz()//1Hz監控
{
                if(key_watch)
                {
                        if(flag_watch0)
                        {
                                if(adc1<2800||adc2>2800||adc3>2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch0=0;
                                }
                        }
                        if(flag_watch1)
                        {
                                if(adc1>2800||adc2<2800||adc3>2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch1=0;
                                }
                        }
                        if(flag_watch2)
                        {
                                if(adc1>2800||adc2>2800||adc3<2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch2=0;
                                }
                        }
                        if(flag_watch3)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4<2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch3=0;
                                }
                        }                       
                        if(flag_watch4)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4>2800||adc5<2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch4=0;
                                }
                        }
                        if(flag_watch5)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4>2800||adc5>2800||adc6<2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch5=0;
                                }
                        }
                }
}
void pwm0_watch_5Hz()//5Hz監控
{
                if(key_watch)
                {
                        if(flag_watch0)
                        {
                                if(adc1<2800||adc2>2800||adc3>2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch0=0;
                                }
                        }
                        if(flag_watch1)
                        {
                                if(adc1>2800||adc2<2800||adc3>2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch1=0;
                                }
                        }
                        if(flag_watch2)
                        {
                                if(adc1>2800||adc2>2800||adc3<2800||adc4>2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch2=0;
                                }
                        }
                        if(flag_watch3)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4<2800||adc5>2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch3=0;
                                }
                        }
                        if(flag_watch4)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4>2800||adc5<2800||adc6>2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch4=0;
                                }
                        }
                        if(flag_watch5)
                        {
                                if(adc1>2800||adc2>2800||adc3>2800||adc4>2800||adc5>2800||adc6<2800)
                                {
                                        TR0=0;
                                        TR1=0;
                                        cnt_t0=0;
                                        cnt_t1=0;
                                        INT_PWM();
                                        key_stop=0;
                                        flag_watch5=0;
                                }
                        }
                }       
}

void display() //LCD顯示設置
{        
        LCD_Write_Command(0x86);
        LCD_Write_Data('W');
        LCD_Write_Data('A');
        LCD_Write_Data('T');
        LCD_Write_Data(':');
        if(!key_watch)
        {
                LCD_Write_Data('O');
                LCD_Write_Data('F');
                LCD_Write_Data('F');
        }       
        else
        {
                LCD_Write_Data('O');
                LCD_Write_Data('N');
                LCD_Write_Data(' ');
        }

        LCD_Write_Command(0xc0);//顯示頻率
        if(!flag_Hz)
        {
                LCD_Write_Data('1');
        }
        else LCD_Write_Data('5');
        LCD_Write_Data('H');
        LCD_Write_Data('Z');       

        if(cnt_times==99999999) cnt_times=0;       
        Voltage[8]=(cnt_times/100000000);
        Voltage[7]=(cnt_times/10000000)%10;
        Voltage[6]=(cnt_times/1000000)%10;
        Voltage[5]=(cnt_times/100000)%10;
        Voltage[4]=(cnt_times/10000)%10;
        Voltage[3]=(cnt_times/1000)%10;
        Voltage[2]=(cnt_times/100)%10;
        Voltage[1]=(cnt_times/10)%10;
        Voltage[0]=cnt_times%10;
        LCD_Write_Command(0xc5);                   //顯示計數次數
        LCD_Write_Data(Voltage[8]+0x30);
        LCD_Write_Data(Voltage[7]+0x30);
        LCD_Write_Data(Voltage[6]+0x30);
        LCD_Write_Data(Voltage[5]+0x30);
        LCD_Write_Data(Voltage[4]+0x30);
        LCD_Write_Data(Voltage[3]+0x30);
        LCD_Write_Data(Voltage[2]+0x30);
        LCD_Write_Data(Voltage[1]+0x30);
        LCD_Write_Data(Voltage[0]+0x30);
}
void INT_IO() //IO模式設置
{
        P1M1=0x7e;//0111 1110  01推挽 10高阻輸入
        P1M0=0x00;//0000 0000
        P5M1=0x00;
        P5M0=0x00;       
}
uint16 AD_get(uchar8 channel)                //獲取AD值
{
        ADC_CONTR=0xc0|channel;         // 1100 0000 ADC_POWER ADC_FLAG ADC_START -  CHS3 CHS2 CHS1 CHS0
        Delay();                   
        return(ADC_RES*16+ADC_RESL/16);
        ADC_RES = 0;                    //Clear previous result
        ADC_RESL = 0;     
}                                                                
#define N 11                                       
uint16 adc_data(uchar8 channel)     //AD值換算及濾波
{
        uint16 value_buf[N];
        uint16 count,i,j,temp;
        for(count=0;count<N;count++)
        {
                value_buf[count] = AD_get(channel);
        }  
        for(j=0;j<N-1;j++)
        {
                for(i=0;i<N-j;i++)
                {
                        if(value_buf>value_buf[i+1])
                        {
                                temp =value_buf;
                                value_buf= value_buf[i+1];
                                value_buf[i+1] = temp;
                        }
                }
        }
        value_buf[(N-1)/2]=(uint16)((ulong32)value_buf[(N-1)/2]*4940/4096);
        return value_buf[(N-1)/2];
}

void MCLK()//選擇系統時鐘源
{
        P_SW2 = 0x80;
    CKSEL = 0x00;                               //選擇內部IRC ( 默認 )
        CLKDIV = 0x00;                               //時鐘不分頻
    P_SW2 = 0x00;
}
//void RST()//系統復位設置
//{
//        RSTCFG=0x50;
//}

void main()
{
          MCLK();
//        RST();
        timer_int();
        InitADC();
        LCD_Initialise();
        INT_IO();
        INT_PWM();
        EA=1;
        while(1)
        {
                key_scan();
                led_control();
                if(!flag_Hz)
                {
                        pwm0_watch_1Hz();
                }
                if(flag_Hz)
                {
                        pwm0_watch_5Hz();
                }
                display();
        }       
}

void timer0_int() interrupt 1 //定時器0中斷輸出脈沖
{
        cnt_t0++;
        if(!flag_Hz)
        {
                switch(cnt_t0)
                {
                        case 1  :pwm0=1;break;
                        case 26 :pwm0=0;break;
                        case 51 :pwm1=1;break;
                        case 76 :pwm1=0;break;
                        case 101:pwm2=1;break;
                        case 126:pwm2=0;break;
                        case 151:pwm3=1;break;
                        case 176:pwm3=0;break;
                        case 201:pwm4=1;break;
                        case 226:pwm4=0;break;
                        case 251:pwm5=1;break;
                        case 276:pwm5=0;break;
                        case 301:cnt_t0=0;cnt_times++;break;
                        default:break;
                }
        }
        if(flag_Hz)
        {
                switch(cnt_t0)
                {
                        case 1 :pwm0=1;break;
                        case 6 :pwm0=0;break;
                        case 11:pwm1=1;break;
                        case 16:pwm1=0;break;
                        case 21:pwm2=1;break;
                        case 26:pwm2=0;break;
                        case 31:pwm3=1;break;
                        case 36:pwm3= 0;break;
                        case 41:pwm4=1;break;
                        case 46:pwm4=0;break;
                        case 51:pwm5=1;break;
                        case 56:pwm5=0;break;
                        case 61:cnt_t0=0;cnt_times++;break;
                        default:break;
                }
        }       
}
void timer1_int() interrupt 3 //定時器1中斷 監控
{
        cnt_t1++;
        if(!flag_Hz)
        {
                switch(cnt_t1)
                {
                        case 3  :flag_watch0=1;break;
                        case 23 :flag_watch0=0;break;
                        case 53 :flag_watch1=1;break;
                        case 73 :flag_watch1=0;break;
                        case 103:flag_watch2=1;break;
                        case 123:flag_watch2=0;break;
                        case 153:flag_watch3=1;break;
                        case 173:flag_watch3=0;break;
                        case 203:flag_watch4=1;break;
                        case 223:flag_watch4=0;break;
                        case 253:flag_watch5=1;break;
                        case 273:flag_watch5=0;break;
                        case 301:cnt_t1=0;break;
                        default:break;
                }
        }
        if(flag_Hz)
        {
                switch(cnt_t1)
                {
                        case 2 :flag_watch0=1;break;
                        case 5 :flag_watch0=0;break;
                        case 12:flag_watch1=1;break;
                        case 15:flag_watch1=0;break;
                        case 22:flag_watch2=1;break;
                        case 25:flag_watch2=0;break;
                        case 32:flag_watch3=1;break;
                        case 35:flag_watch3=0;break;
                        case 42:flag_watch4=1;break;
                        case 45:flag_watch4=0;break;
                        case 52:flag_watch5=1;break;
                        case 55:flag_watch5=0;break;
                        case 61:cnt_t1=0;break;
                        default:break;
                }
        }
}
void ADC_int() interrupt 5
{
        ADC_CONTR &= ~ADC_FLAG;       
}
/*----------------------------
Initial ADC sfr
----------------------------*/
void InitADC()
{
    ADCCFG = 0x08;                              //設置ADC時鐘為系統時鐘/2/16/16
    EADC = 1;                                   //使能ADC中斷
        ADC_RES = 0;                                            //Clear previous result
        ADC_RESL = 0;
}                                         
回復

使用道具 舉報

5#
ID:303665 發表于 2019-4-10 21:02 | 只看該作者

程序貼在上面了,主要功能是用單片機發送PWM讓繼電器動作然后通過ADC采樣繼電器是否接通
回復

使用道具 舉報

6#
ID:303665 發表于 2019-4-10 22:07 | 只看該作者
為什么加了LCD1602顯示的程序,單片機會不執行程序?
回復

使用道具 舉報

7#
ID:734027 發表于 2020-4-20 23:59 | 只看該作者
樓主解決了嘛?我的也是這樣的
回復

使用道具 舉報

8#
ID:337139 發表于 2021-7-6 10:00 | 只看該作者
要看一下主時序,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产日本 | 午夜欧美a级理论片915影院 | 国产精品免费看 | 欧美久久久网站 | 国产精品欧美一区二区 | 久久久久久91 | 国产精品久久久久久久久久久免费看 | 天天操综合网 | 羞羞视频网页 | 国内精品一区二区三区 | 亚洲一区二区三区欧美 | 日韩精品一区二区三区视频播放 | 久久精品99国产精品 | 欧美亚洲视频 | 中文字幕高清一区 | 国产精品久久久久久久 | 欧美一级二级在线观看 | 国产ts人妖另类 | 综合色在线 | 亚洲精品电影网在线观看 | 日韩电影中文字幕 | 91精品国产一区二区在线观看 | 欧美中文字幕在线观看 | 欧美a在线观看 | 日日精品 | 日韩中文一区 | 三级在线免费观看 | 国产一级片久久久 | 国产精品一级 | 精品国产欧美在线 | 亚洲精品一区二区网址 | 亚洲视频 欧美视频 | 午夜视频在线免费观看 | 欧美综合精品 | 日本精品一区二区三区在线观看 | 国产精品视频一区二区三区 | 一级看片 | 激情综合五月天 | 99精品亚洲国产精品久久不卡 | 久久免费高清视频 | 久久1区 |