00-99自动循环显示程序

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h> //中断信号头文件

#define BAUD 9600
#define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us)
#define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms)
#define uint unsigned int
#define uchar unsigned char

uchar ledshow[]={0x84,0xF6,0x4C,0x64,0x36,0x25,0x05,0xF4,0x04,0x24,0x84};//自己接的电路的正确显示
/******************************************
delay函数
******************************************/
void delay()
{
uint i,j;
for(i=1;i<100;i++)
{
for(j=110;j<0;j--);
}
}

/*
void delay(void) //12Mhz延时1ms
{
unsigned char a,b;
for(b=129;b>0;b--)
for(a=45;a>0;a--);
}


void delay()
{
int i,j;
for(i=100;i>0;i--)
{
for(j=1722;j>0;j--); //8M时改为1141;
} //12M时为1722;
}
*/

/******************************************
端口初始化
******************************************/
void port_init()
{
DDRC=0XFF;
PORTC=0x84;
DDRB=0XFF;
PORTB=0XFD&0XF7;
//DDRD=0XFF;
//PORTD=0XEF;
DDRD=0x00; //配置为输入口
PORTD=0xFF; //上拉电阻使能


}
/***********************************
函 数 名:handle_mcucsr()
功 能:启动MCU
输入参数:无(上电)
输出参数:无(启动)
***********************************/
void handle_mcucsr(void)
{
unsigned char mcucsr;
mcucsr = MCUCSR;
MCUCSR = 0;
} //启动MCU,读取MCUCSR,然后复位*/
/************************************
函数名:外部中断初始化
功能:初始化INT0
输入参数:
输出参数:
************************************/
void int0_init()
{
DDRD=0X00;
DDRD&=~(1<<PD2); //PD2/INT0端口配置為輸入;
GICR|=(1<<INT0); //使能INT0;
MCUCR&=((~(1<<ISC01))&(~(1<<ISC00)));
//MCUCR=0x00; //设置INT0为低电平触发
//GIFR|=(1<<INTF0); //清零外部中断标志位
}

/******************************************
dispaly函数
******************************************/

uchar num,shi,ge;
void display(uchar shi,uchar ge)
{
PORTB=0XFD; //段选
PORTC=ledshow[shi];
//PORTB|=(1<<PB1);
//PORTC=0xff;
//PORTB&=~(1<<PB3);
//PORTC=0xfd; //位选
//PORTB|=0XFF;
delay_ms(190); //数码管显示时的频率,即闪烁

PORTB=0XF7; //段选
PORTC=ledshow[ge];
//PORTB|=(1<<PB1);
//PORTC=0xff;
//PORTB&=~(1<<PB3);
//PORTC=0xf7; //位选
//PORTB|=0XFF;
delay_ms(190);
}

/******************************************
主函数
******************************************/

void main()
{
int i;
port_init();
while(1)
{
num++;
i

f(
num==99)
num=0;
shi=num/10;
ge=num%10;
for(i=0;i<20;i++)//i可以调整为合适的值,来控制数码管数字变化的快慢
{
display(shi,ge);
}
}
}

相关文档
最新文档