AVR单片机4位数码管计数,从0000-5000一直循环。位选端接在PC的低4位,而段选端接在PA口。程序如下:
#include iom16v.h //头文件
#include macros.h //头文件
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
uchar i;//定义变量
uint num;//定义计数变量
#pragma data:code//数组存放位置
const table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e
};//共阳数码管0--9代码
/*************************************************************/
/*********************延时子程序******************************/
/*************************************************************/
void delay(uint z)//一个带参数,不带返回值的子函数
{
uint x,y;//定义两个变量
for(x=0;x x++)//外循环
for(y=z;y y--);//内循环
}
/*************************************************************/
/*********************显示子程序******************************/
/*************************************************************/
void xian()
{
for(i=0;i i++)//显示20次,使整体看起来不闪烁
{
PORTA=table[num/1000];//将千位数给PA口
尊龙凯时平台官网PORTC =~BIT(3);//打开千位位选端
delay(2);//延时一会儿
PORTC|=BIT(3);//关掉千位
PORTA=table[num%1000/100];//将百位数给PA口
PORTC =~BIT(2);
delay(2);
PORTC|=BIT(2);
PORTA=table[num%100/10];//将十位数给PA口
PORTC =~BIT(1);
delay(2);
PORTC|=BIT(1);
PORTA=table[num%10];//将个位数给PA口
PORTC =~BIT(0);
delay(2);
PORTC|=BIT(0);
}
num++;//将它加1,形成动态计数
if(num 5000)//如果它大于5000就将计数器清0
num=0;//清0
}
/*************************************************************/
/*************************主程序******************************/
/*************************************************************/
void main()
{
DDRA=0xff;//设置PA口为输出
DDRC=0xff;//设置PC口为输出
while(1)
{
xian(); //调用显示子函数
}
}
全国服务电话:021-49393958 传真:
公司地址: