您的位置 首页 硬件

AVR单片机对数码管的操控规划

AVR单片机对数码管的控制设计-#include

#include

#include

#include

#include

#define code PROGMEM

#define uchar unsigned char

#define uint unsigned int

code const ucharLED_7[16] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//common of +

code const uchar position[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//数码管数据P0口,数码管操控P2口

#include

#include

#include

#include

#include

#define code PROGMEM

#define uchar unsigned char

#define uint unsigned int

code const ucharLED_7[16] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//common of +

code const uchar posiTIon[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

AVR单片机对数码管的操控规划

uchar TIme[4]; //时刻计数

volaTIle uchar disp_buff[8]; //显现缓冲区

volaTIle uchar time_count = 0;

volatile uchar point_on = 0;

volatile uchar posit = 0;

volatile uchar time_10ms_ok = 0;

void time_to_dispbuff(void);

void time1_init(void);

void time0_init(void);

void display(void);

int main(void)

{

PORTA = 0xff;

DDRA = 0xff;

PORTC = 0xff;

DDRC = 0xff;

time[0] = 00;//1/10sec

time[1] = 30;//sec

time[2] = 59;//minute

time[3] = 23;//hour

time_to_dispbuff();

time1_init();

sei();

while(1)

{

if(time_10ms_ok)

{

time_10ms_ok = 0;

if(++time[0]》=100)

{

time[0] = 0;

point_on = ~point_on;

if(++time[1]》=60)

{

time[1] = 0;

if(++time[2]》=60)

{

time[2] = 0;

if(++time[3]》=24)

{

time[3] = 0;

}

}

}

}

time_to_dispbuff();

}

}

}

void time0_init(void)

{

TCCR0 = 0x05;

TCNT0 = 0xea;

TIFR |= 0x02;

TIMSK |= 0x02;

}

void time1_init(void)

{

TCCR1A = 0x00;

TCCR1B = 0x01;

TCNT1 = 0xa99a;

//TCNT1H = 0xa9;

//TCNT1L = 0x9a;

TIFR |= 0x80;

TIMSK |= 0x80;

}

SIGNAL(SIG_OVERFLOW1)

{

TCNT1 = 0xa99a;

display();

if(++time_count 》=5)

{

time_10ms_ok = 1;

time_count = 0;

}

}

void display(void)

{

PORTC = 0xff;

PORTA = pgm_read_byte(&led_7[disp_buff[posit]]);

if(point_on && ((posit==2)||(posit==4)||(posit==6)))PORTA &= 0x7f;

PORTC = pgm_read_byte(&position[posit]);

if(++posit》=8)posit = 0;

}

void time_to_dispbuff(void)

{

uchar i,j=0;

for(i=0;i《=3;i++)

{

disp_buff[j++] = time[i]%10;

disp_buff[j++] = time[i]/10;

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/346558.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部