简介:在这里为大家提供一个ATmega16L单片机数码管显示示例程序设计。
;******************************************************
;*标题: ATmega16L单片机数码管显示示例程序
;*文件:
;*版本: 1.0
;*******************************************************
#include
#include
//注: 内部函数_delay_ms() 最高延时 262.144mS@1MHz 即 32.768ms@8MHz
// 该函数可以实现较精确的定时for()/while()指令很难计算延时时间
// 为了使 _delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频
// 本范例为4MHz内部RC振荡器 即 F_CPU=4000000
//**********************************
#define uchar unsigned char //数据类型说明
#define uint unsigned int //数据类型说明
#define RD4 4 //
#define RD5 5 //
#define RD6 6 //
#define RD7 7 //
//**********************************
uchar table[11]={0xc0,0xf9,0xa4,0xb0,0x99, // 0, 1, 2, 3,4,
0x92,0x82,0xf8,0x80,0x90, 0xff} ;// 5, 6, 7, 8, 9, off
uchar buf[4] ;
uchar disppoint; //
//**********************************
void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
{ uint j ;
for( ;i!=0 ;i--)
{for(j=8000 ;j!=0 ;j--) ;}
}
//**********************************
//**********************************
void put_num(char c)
{
PORTC=table[c&0x0f]; //
}
//*********************************
void main()
{
DDRD=0xFF ; //置PD口为输出
PORTD=0xFF ;
DDRC=0xFF ;
PORTC=0xFF ; //置PC口为输出
buf[0]=0; //
buf[1]=1; //
buf[2]=2; //
buf[3]=3; //
while(1)
{
disppoint=0; //
put_num(buf[disppoint]); //
PORTD &=~(1<
DelayMs(1); //
PORTD |= (1<
disppoint++; //
put_num(buf[disppoint]); //
PORTD &=~(1<
DelayMs(1); //
PORTD |= (1<
disppoint++; //
put_num(buf[disppoint]); //
PORTD &=~(1<
DelayMs(1); //
PORTD |= (1<
disppoint++; //
put_num(buf[disppoint]); //
PORTD &=~(1<
DelayMs(1); //
PORTD |= (1<
//
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』