ATMEGA8单片机数码管加减计数显示设计源码及仿真.zip
时间:10-30 16:40
查看:1012次
下载:162次
简介:
本资料为ATMEGA8单片机数码管加减计数显示设计源码及仿真等。
#include <iom8v.h>
/********************************************************************
数据类型定义
*********************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define WEI PORTC
#define DUAN PORTB
/********************************************************************
数码管段码定义0123456789
*********************************************************************/
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint cnt=0000;//计数初值
uchar key_up;//加计数按键标志
uchar key_down;//减计数按键标志
/**********************************************************************
MS级延时函数程序,参数i 延时时间
**********************************************************************/
void DelayMS(uint i)
{
uint j;
for(;i!=0;i--)
{
for(j=8000;j!=0;j--);
}
}
/**********************************************************************
显示函数
注意:使用开发板时WEI的四个值为0XEF,0XDF,0XBF,0X7F
**********************************************************************/
void Led() //显示函数
{
uchar m=1;//消隐延时
WEI=0x01; //输出低电平,选通千位数
DUAN=table[cnt/1000]; //取出千位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x02; //输出低电平,选通百位数
DUAN=table[cnt%1000/100]; //取出百位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x04; //输出低电平,选通十位数
DUAN=table[cnt%100/10]; //取出十位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x08;
DUAN=table[cnt%10]; //取出个位数,查表,输出。
DelayMS(m);
WEI=0x00;
DUAN=0xff;
}
/**********************************************************************
初始化I/O
**********************************************************************/
void init_io(void)//初始化I/O
{
//设置B口为输出
DDRB=0XFF;
PORTB=0xFF;
//设置D口为输入
DDRD=0x00;
PORTD=0x00;
//设置C口为输出
DDRC=0XFF;
PORTC=0xFF;
}
/**********************************************************************
按键扫描函数
**********************************************************************/
void get_key(void)//按键扫描函数
{
while((PIND&0X01)==0)//按键加计数标志
{key_up=1;
Led();
}
while((PIND&0X02)==0)//按键减计数标志
{key_down=1;
Led();}
}
/**********************************************************************
主函数
**********************************************************************/
void main(void)
{
init_io();//初始化I/O
while(1)
{
get_key();//按键扫描
Led(); //显示
if (key_up==1)
{
if(cnt!=9999)//判断是否计数到9999
{
cnt=cnt+1;//加一
key_up=0;
}
}
if (key_down==1)
{
if(cnt!=0)//判断是否计数到0
{
cnt=cnt-1;//减一
key_down=0;
}
}
}
}
/**********************************************************************
结束
**********************************************************************/