STM8s Discovery Step:3 Drive 7 Segment
June 21, 2010 by 10Logic.com
Filed under Featured, Microcontroller, STM8s-Discovery
วันนี้มาต่อกันเรื่อง stm8s drive 7′ segment ผมพึ่งทดลองเล่น stm8 ทำเสร็จอันไหนก็จะมาเขียนไว้ในบล็อกแล้วกันครับ เผื่อว่ามันจะเป็นประโยชน์กับผู้ที่กำลังเริ่มต้น ผมค้นการเขียนไม่พบลิงค์ในประเทศไทยเลยส่วนมากจะเป็นประเทศจีน ไม่แน่ใจว่าที่มีขายใน ett ซื้อไปเล่นกันแล้วเป็นอย่างไรกัน ไม่เห็นพบข้อมูลในประเทศไทย อาจจะยังไม่มีใครเอามาลง
สำหรับการเขียน stm8s drive 7′ segment นี้ผมจะ drive แค่ 1 digit นับเลข 0-9 วงจรตามรูปด้านล่างนี้เลยครับ ผมตัดแปะเอาไม่ได้วาดวงจรทั้งหมด
โค้ดโปรแกรม
/* Includes -------------------------------------------------*/
#include "stm8s.h"
#include "inigpio.h"
/* Private defines -------------------------------------------*/
/* Private function prototypes -------------------------------*/
/* Private functions -----------------------------------------*/
void initialGPIO(void){
// Reset ("de-initialise") GPIO port D.
GPIO_DeInit(GPIOB);
// Initialise pin 0 of port D.
GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
}
void Delay(unsigned int i){
unsigned int j;
while(i--){
for(j=0;j<10000;j++);
}
}
void main(void){
// Delay for a short while.
u16 d=0;
char digithex[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
initialGPIO();
// Infinite loop.
for(;;) {
if(d>9)
d=0;
GPIO_Write(GPIOB,digithex[d]);
Delay(10);
d++;
}
}
ก่อนจบ ผมรู้สึกดีกับกระทู้นี้มาก http://www.electoday.com/bbs/viewthread.php?tid=6399 ทาง http://www.thaieasyelec.com/ ได้จัดอบรมสัมนาเรื่อง sourcing ผมลงทะเบียนไปแล้วเรียบร้อย อย่างไรก็ขอขอบคุณการจัดสัมนาดีๆแบบนี้นะครับ
Source
SegmentTest.rar
ิby @10
Post Footer automatically generated by Add Post Footer Plugin for wordpress.


ขอเปลี่ยนตรงฟังก์ชัน void initialGPIO(void) ไม่ต้องกำหนด GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); ทุกบิทมี macro ตัวหนึ่งคือ GPIO_PIN_ALL ดังนั้นแก้ใหม่จะได้
void initialGPIO(void){
// Reset (“de-initialise”) GPIO port D.
GPIO_DeInit(GPIOB);
// Initialise pin 0 of port D.
GPIO_Init(GPIOB, GPIO_PIN_ALL, GPIO_MODE_OUT_PP_LOW_FAST);
}
กำลังศึกษาอยู่เหมือนกันครับ ขอบคุณครับ
ยินดีครับ ปรึกษาได้ผมกำลังเล่นอยู่ครับ ตอนนี้ก็ได้ uart2 polling, uart2 interrupt, function printf
กำลังเอาไปต่อ sd card แล้วทำให้รองรับ fat32 อยู่ครับ