บทเรียนการควบคุม 7 segment แบบสแกนทีละหลัก
#include<avr/io.h>
#include<compat/deprecated.h>
#define F_CPU 8000000UL
#include<util/delay.h>
const unsigned char display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char seg1 = 0,seg2 = 0,seg3 = 0; //หลังจากการแสดงผลเป็น 000 แล้วลองเปลี่ยนค่า seg
//จาก 0 เป็นค่าอื่นๆ เช่น 1,2และ3
unsigned int value=0;
void delay_ms(unsigned int i)
{
for (; i>0;i--)
_delay_us(20);
}
void multiplx(void)
{
sbi(PORTB,0);
cbi(PORTB,1);
cbi(PORTB,2);
PORTA=display[seg1];
delay_ms(30);
cbi(PORTB,0);
sbi(PORTB,1);
cbi(PORTB,2);
PORTA=display[seg2];
delay_ms(30);
cbi(PORTB,0);
cbi(PORTB,1);
sbi(PORTB,2);
PORTA=display[seg3];
delay_ms(30);
seg1=(value%10);
seg2=(value%100)/10;
seg3=(value%1000)/100;
}
int main(void)
{
DDRA=0xFF;
PORTA=0x00;
DDRB=0x07;
while(1)
{
multiplx();
}
return 0;
}
แก้ไขเมื่อ 15 ส.ค. 51 00:54:31
แก้ไขเมื่อ 15 ส.ค. 51 00:51:51
แก้ไขเมื่อ 15 ส.ค. 51 00:48:53
แก้ไขเมื่อ 15 ส.ค. 51 00:46:39