|
/*******************************************************
* 程序功能:数码管显示器动态显示
* 接线说明:核心板JP2 PA0-PA7连接到系统底板动态数码管显示电路JP81
* 实验现象:8位数码管产生精确秒计时
* 日 期 : 2014/7/22
* 作 者 : 翟志刚
*******************************************************/
#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int
uchar led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar position[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar time[3]; // 时、分、秒计数
uchar dis_buff[8]; // 显示缓冲区,存放要显示的6个字符的段码值
int time_counter; // 1秒计数器
/*******************************************************
//函数名称:delay_ms(uint k)
//函数功能:延时子程序
//入口参数:k,延时时间参数
//返回参数:无
********************************************************/
void delay_1ms(int k)
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<1000;j++)
;
}
}
/*******************************************************
//函数名称:time_to_disbuffer(void)
//函数功能:时间值送显示缓冲区函数子程序
//入口参数:i,j,秒计数到十进位
//返回参数:无
********************************************************/
void time_to_disbuffer(void) // 时间值送显示缓冲区函数
{
uchar i,j = 0;
for (i=0;i < 3;i++)
{
dis_buff[3*i] = time[i] % 10;
dis_buff[3*i+1] = time[i] / 10;
}
}
/*******************************************************
//函数名称:display(void)
//函数功能:扫描显示函数子程序
//入口参数:i,数码管位数
//返回参数:无
********************************************************/
void display(void) // 扫描显示函数,执行时间12ms
{
uchar i;
for(i=0;i<8;i++)
{
if (i==2 || i==5 )
{
PORTA = 0x40;
}
else
PORTA = led_7[dis_buff[i]];
PORTC = position[i];
delay_1ms(1); // (2)
PORTC = 0xff; // (3)
}
}
/*******************************************************
//函数名称:main()
//函数功能:程序主函数
********************************************************/
void main(void)
{
PORTA=0x00; // PORTA初始化
DDRA=0xFF;
PORTC=0x00; // PORTC初始化
DDRC=0xFF;
time[2] = 0; time[1] = 0; time[0] = 0; // 时间初值23:58:55
time_to_disbuffer();
while (1)
{
display();
// 显示扫描,执行时间12ms
if (++time_counter >= 100)
{
time_counter = 0; // (4)
// point_on = ~point_on; // (5)
if (++time[0] >= 60)
{
time[0] = 0;
if (++time[1] >= 60)
{
time[1] = 0;
if (++time[2] >= 24)
time[2] = 0;
}
}
}time_to_disbuffer();
delay_1ms(1); // 延时13ms,可进行其它处理(6)
}
}
|
|