STM8s105C4T6 Drive 7 Segment 3 Digit
July 17, 2010 by 10Logic.com
Filed under Microcontroller, STM8s-Discovery
วันนี้ผมนั่นเขียนโปรแกรม Drive 7 Segment 3 digit ด้วย STM8s105C4T6 เสร็จแล้วก็เลยเขียนวงจรและเผยแพร่ต่อไป เผื่อว่าใครที่กำลังหัดเล่น STM8s จะได้เริ่มต้นได้ถูก ในประเทศไทยยังไม่มีหนังสือให้อ่าน แต่ก็สามารถค้นหาใน internet ได้แต่ต้องใช้ความพยายามหน่อยครับ หาไปเรื่อยเดี๋ยวก็หาเจอ
จากที่ผมซื้อไอซี STM8s105C4T6 จากอีทีทีตัวละ 60 กว่าบาท แล้วก็ซื้อ ET-PCB LQFP48 มาด้วยเพื่อมาต่อวงจรเอง เสียดายไม่มีกล้องครับ จะได้ถ่ายภาพมาให้ดูสถาปัตยกรรมการต่อวงจรของผม อิอิ(มันส์จริงๆ)
โปรแกรมที่เขียนเป็นการนับเลขจาก 0-999 ครับ โค้ดโปรแกรมตามด้านล่างนี้ เดี๋ยววันหลังผมจะเขียนอธิบายไว้ อย่างเช่น GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST, GPIO_DeInit ฯลฯ (ผมใช้ Cosmic compiler นะครับ) เพราะเป็นสิ่งที่ผมเริ่มต้นใหม่เช่นกัน ว่างๆก็เล่น ส่วน atmega128 ก็ยังเล่นอยู่เหมือนเดิมแต่ STM8 เป็นทางเลือกครับ
// Program : Program Drive 7' segment 3Digit
// Writer : akiraten
// Email : akirten@hotmail.com
// Blog : http://www.10logic.com
// Development tools: STM8S Discovery
// Includes -----------------------------------------
#include
#include
#include
#include"stm8s.h"
#include"inigpio.h"
// Private defines ----------------------------------
char digithex[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char bufuart[4];
void initialGPIO(void){
// Reset ("de-initialise") GPIO port D,B
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOA);
// Initialise pin 0 of port B.
GPIO_Init(GPIOB, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOA,(GPIO_PIN_3)|(GPIO_PIN_4)|(GPIO_PIN_5),GPIO_MODE_OUT_PP_LOW_FAST);
// GPIO_Init(GPIOE,GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST);
// GPIO_Init(GPIOE,GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_FAST);
}
void charto7segment(char digit){
switch(digit){
case 0x30: GPIO_Write(GPIOB,digithex[0]);
break;
case 0x31: GPIO_Write(GPIOB,digithex[1]);
break;
case 0x32: GPIO_Write(GPIOB,digithex[2]);
break;
case 0x33: GPIO_Write(GPIOB,digithex[3]);
break;
case 0x34: GPIO_Write(GPIOB,digithex[4]);
break;
case 0x35: GPIO_Write(GPIOB,digithex[5]);
break;
case 0x36: GPIO_Write(GPIOB,digithex[6]);
break;
case 0x37: GPIO_Write(GPIOB,digithex[7]);
break;
case 0x38: GPIO_Write(GPIOB,digithex[8]);
break;
case 0x39: GPIO_Write(GPIOB,digithex[9]);
break;
}
}
void delay(unsigned int i){
unsigned int j;
while(i--){
for(j=0;j<2000;j++);
}
}
void main(void){
// Delay for a short while.
u16 d=0,i=0;
unsigned char len=1;
memset(bufuart,0,sizeof(bufuart));
strcpy(bufuart,"0");
initialGPIO();
GPIO_Write(GPIOA,(GPIO_PIN_3)|(GPIO_PIN_4)|(GPIO_PIN_5));
for(;;) {
if(i>100){
memset(bufuart,0,sizeof(bufuart)); // clear bufuart
sprintf(bufuart,"%d",d); // convert int to string
len = strlen(bufuart);
d++;
if(d>999)
d=0;
i=0;
}
if(len==1){
GPIO_WriteHigh(GPIOA, GPIO_PIN_3); // 7'segment digit 1 on
GPIO_WriteLow(GPIOA, GPIO_PIN_4); // 7'segment digit 2 off
GPIO_WriteLow(GPIOA, GPIO_PIN_5); // 7'segment digit 3 off
charto7segment(bufuart[0]); // write data to 7'segment
delay(1);
}else if(len==2){
GPIO_WriteLow(GPIOA, GPIO_PIN_4); // 7'segment digit 2 off
GPIO_WriteLow(GPIOA, GPIO_PIN_5); // 7'segment digit 3 off
GPIO_WriteHigh(GPIOA, GPIO_PIN_3); // 7'segment digit 1 on
charto7segment(bufuart[1]); // write data to 7'segment
delay(1);
GPIO_WriteLow(GPIOA, GPIO_PIN_3); // 7'segment digit 1 off
GPIO_WriteLow(GPIOA, GPIO_PIN_5); // 7'segment digit 3 off
GPIO_WriteHigh(GPIOA, GPIO_PIN_4); // 7'segment digit 2 on
charto7segment(bufuart[0]); // write data to 7'segment
delay(1);
}else if(len==3){
GPIO_WriteLow(GPIOA, GPIO_PIN_3); // 7'segment digit 1 off
GPIO_WriteLow(GPIOA, GPIO_PIN_4); // 7'segment digit 2 off
GPIO_WriteHigh(GPIOA, GPIO_PIN_5); // 7'segment digit 3 on
charto7segment(bufuart[0]); // write data to 7'segment
delay(1);
GPIO_WriteLow(GPIOA, GPIO_PIN_3); // 7'segment digit 1 off
GPIO_WriteLow(GPIOA, GPIO_PIN_5); // 7'segment digit 3 off
GPIO_WriteHigh(GPIOA, GPIO_PIN_4); // 7'segment digit 2 on
charto7segment(bufuart[1]); // write data to 7'segment
delay(1);
GPIO_WriteLow(GPIOA, GPIO_PIN_4); // 7'segment digit 3 off
GPIO_WriteLow(GPIOA, GPIO_PIN_5); // 7'segment digit 3 off
GPIO_WriteHigh(GPIOA, GPIO_PIN_3); // 7'segment digit 1 on
charto7segment(bufuart[2]); // write data to 7'segment
delay(1);
}
i++;
}
}
Source: Segment3Digit.rar
Post Footer automatically generated by Add Post Footer Plugin for wordpress.

