📄 smg.c
字号:
/*******************************************
文件:SMG.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驱动开发板上的数码管,滚动显示1、2、3、4、5、6
备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#include <stdio.h> //标准输入输出头文件
#pragma data:code
const SEGMENT[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*******************************************
函数名称: One_smg_display
功 能: 指定的数码管显示指定的内容
参 数: data--显示的内容(0-15)
number--指定的数码管(1-6)
返回值 : 无
/********************************************/
void One_smg_display(uchar data,uchar number)
{
PORTB|=0x3F; //输出位选
PORTA|=BIT(BITLK); //更新位选
Delayus(50); //调整时序
PORTA&=~BIT(BITLK); //锁存位选
PORTB=SEGMENT[data]; //输出段选
PORTA|=BIT(SEGLK); //更新段选
Delayus(50); //调整时序
PORTA&=~BIT(SEGLK); //锁存段选
number=~BIT(number-1); //调整位选(指定时是1~6,而操作的时候是0~5)
PORTB=number; //输出位选
PORTA|=BIT(BITLK); //更新位选
Delayus(50); //调整时序
PORTA&=~BIT(BITLK); //锁存位选
}
/*******************************************
函数名称: All_smg_display
功 能: 6个数码管显示指定的内容
参 数: *pdata--显示内容数组地址
返回值 : 无
/********************************************/
void All_smg_display(uchar *pdata)
{
uchar i;
for(i=0;i<6;i++)
{
One_smg_display(pdata[i],i+1);
Delayms(1);
}
}
/*******************************************
函数名称: Cycle_smg_display
功 能: 6个数码管从右向左循环滚动显示指定的内容(循环一次)
参 数: *pdata--显示内容数组地址
返回值 : 无
/********************************************/
void Cycle_smg_display(uchar *pdata)
{
uchar i,j;
for(i=0;i<240;i++) //共滚动6次,每次内容显示40个循环
{
for(j=0;j<6;j++) //扫描6个数码管
{
One_smg_display(pdata[(i/40+j)%6],j+1);//显示
Delayus(2000); //调整显示时间和亮度(时间越长亮度越高,但是太长数码管就闪了)
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -