阿乾--移情別戀

關於部落格
無名 啞唬 MSN 天空 我追尋方便的時空,建立我五十歲之後的生活紀錄,...我是草包工程師
  • 208054

    累積人氣

  • 4

    今日人氣

    0

    訂閱人氣

舊物利用--stm8程式練習器

 開發用程式使用 ST Visual Develop  下載程式: STVP  參考書籍: STM8單片機自學筆記 & STM8單片機原理與實踐

主程式:

#include "stm8s.h"
#include "stm8s_tim1.h"
#include "stm8s_tim6.h"

#define BUZZER GPIO_PIN_0
void delay(unsigned int time);
void GPIOinit(void);
void GPIOflash(void);
void GPIO10flash(void);
void tim1init(void);//匯總 TIM1 
void tim1svc(void);//中斷服務程式 
void GPIOon (void);


u8 pcdis[]={0xd6,0x14,0xcc,0x5c,0x1e,0x5a,0xda,0x14,0xde,0x5e};
u8 pedis[]={0x01,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01};
u8 Temperature,Hundreds,Tens,Units;
u8 PowerOn,ON,OFF,ErrFlag;
unsigned int count1;
unsigned char count6;
u8 ErrCount=0;
u8 Start_Flag=0;

@far @interrupt void TIM1_OVF_IRQ(void);
@far @interrupt void TIM6_OVF_IRQ(void);

void KeyScan(void);
void delay(unsigned int time);
void TransData(void);
void ErrTransData(void);
void Display(void);
void GPIOinit(void);
void tim1init(void);
void tim1svc(void);
void tim6init(void);
void tim6svc(void);

void LED_control(u8 LED);


void main(void)
{
        GPIOinit();
        tim1init();        
  tim6init();
  rim();        
        Temperature=120;

        while(1)
        {
        KeyScan();
        if(ErrFlag)
        ErrTransData();
        else
        TransData();
        Display();
        }
}

void KeyScan(void)
{
        GPIO_WriteLow(GPIOD,GPIO_PIN_2);
        GPIO_WriteLow(GPIOD,GPIO_PIN_3);
        GPIO_WriteLow(GPIOD,GPIO_PIN_4);
        GPIO_WriteLow(GPIOD,GPIO_PIN_5);        
        GPIO_Init(GPIOC,(GPIO_PIN_6|GPIO_PIN_7),GPIO_MODE_IN_PU_NO_IT);//變更 sw4 sw5 成為 input

        if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7)==0)//PC7 press
        {
        delay(50);
        if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7)==0)
        {
                while(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7)==0);
                Temperature -=10;
        }        
  }

        
        if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_3)==0)
        {
        delay(50);
        if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_3)==0)
        {
                while(GPIO_ReadInputPin(GPIOB,GPIO_PIN_3)==0);
                Start_Flag = !Start_Flag;
        }
}
        
        if(GPIO_ReadInputPin(GPIOA,GPIO_PIN_1)==0)
        {
        delay(50);
        if(GPIO_ReadInputPin(GPIOA,GPIO_PIN_1)==0)
        {
                while(GPIO_ReadInputPin(GPIOA,GPIO_PIN_1)==0);
                Temperature+=1;
        }
}
        if(GPIO_ReadInputPin(GPIOA,GPIO_PIN_3)==0)
        {
        delay(50);
        if(GPIO_ReadInputPin(GPIOA,GPIO_PIN_3)==0)
        {
                while(GPIO_ReadInputPin(GPIOA,GPIO_PIN_3)==0);
                Temperature+=10;
        }
}


        if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_6)==0)//PC6 press
        {
        delay(50);
        if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_6)==0)
        {
                while(GPIO_ReadInputPin(GPIOC,GPIO_PIN_6)==0);
                Temperature -=1;
                ErrCount++;
        }        
  }
        

}


void delay(unsigned int time)
{
        while(time--);
}

void TransData(void)
{
        Hundreds=Temperature/100;
        Tens=(Temperature%100)/10;
        Units=Temperature%10;
}

void ErrTransData(void)
{
        Hundreds=ErrCount/100;
        Tens=(ErrCount%100)/10;
  Units=ErrCount%10;
}

void Display(void)
{
        
        GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);//DISPLAY 7SEGMENT
        //GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);//DISPLAY 3DIGIT
//        GPIO_Init(GPIOD,(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5),GPIO_MODE_OUT_PP_HIGH_FAST);//DISPLAY 3DIGIT
//        GPIO_Init(GPIOE,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_FAST);//DISPLAY SEGMENT A
        GPIO_WriteLow(GPIOE,GPIO_PIN_5);

        
        if(Hundreds>0)
        {
                GPIO_Write(GPIOC,pcdis[Hundreds]);
                        if(pedis[Hundreds])
                                GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
                                else
                                GPIO_WriteLow(GPIOE,GPIO_PIN_5);
                        }
                else 
                {
                GPIO_Write(GPIOC,0x00);//百位消零 
                GPIO_WriteLow(GPIOE,GPIO_PIN_5);//去除A節
}
                        GPIO_Write(GPIOD,0x10);//趨動百位數
                        delay(500);                
                        GPIO_WriteLow(GPIOC,GPIO_PIN_ALL);
                        delay(5);

        GPIO_Write(GPIOC,pcdis[Tens]);
        if(pedis[Tens])
        GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
        else
         GPIO_WriteLow(GPIOE,GPIO_PIN_5);


                        GPIO_Write(GPIOD,0x08);//趨動十位數
相簿設定
標籤設定
相簿狀態