📄 array_led.c
字号:
/****************************************************************************************
* 文件名:array_led.c
* 功能:数码管显示
* 说明:8位共阴数码管,动态显示
* 硬件连接:
*
* P4.0->P4.7--a->h
* P4.8->P4.15--bit1->bit8
*
*备注:
*
****************************************************************************************/
#include "array_led.h"
uint32 led_shift=0;
uint8 array_led_buf[8]; //显示缓冲区
uint8 array_led_count=0;
uint8 const SEG[24][2] = {
0x3F, '0', //00111111--hgfdcba,1表示量的段码,0表示灭的段码
0x06, '1',
0x5B, '2',
0x4F, '3',
0x66, '4',
0x6D, '5',
0x7D, '6',
0x07, '7',
0x7F, '8',//全部点亮
0x6F, '9',
0x77, 'A',
0x7C, 'B',
0x39, 'C',
0x5E, 'D',
0x79, 'E',
0x71, 'F',
0x76, 'H',
0x38, 'L',
0x37, 'n',
0x3E, 'u',
0x73, 'P',
0x5C, 'o',
0x40, '-',
0x00, 0x00,//全部熄灭
};
//函数名称:array_led_init
//函数功能:8位数码管的初始化
//入口参数:无
//出口参数:无
void array_led_init (void)
{
//引脚连接
PINSEL8 &= 0x00000000;//p4.00--p4.15
PINMODE8 &= 0x00000000;//全部设为上拉模式、
//方向设置与屏蔽设置
FIO4DIRL |= 0xFFFF;//1为输出,0为输入
FIO4MASKL &= 0x0000;//未屏蔽
//读取引脚值
led_shift = FIO4PINL & 0xFFFF;
//共阴初值初始化,全部点亮
//位码P4.8--P4.15对应BIT1--BIT8
FIO4SET1|=0xFF; //位码,选中,段码经2803得低电平
//段码P4.0--P4.7对应A--H
FIO4SET0|=0xFF; //段码,选中,段码码得高电平
//全部点亮,调试成功
}
//函数名称 :array_led
//函数功能 :显示一个数码管,共阳数码管,位码从高位到低位hgfedcba
//入口参数 :num 位码,从右到左
// dat 段码
void array_led(uint8 num,uint8 data )
{
uint8 i,temp;
//预处理
num=(num%8);
FIO4CLR1 |= 0xFF;//取消选中,输出低电平,经2803段码得到高电平
FIO4CLR0 |=0xFF;//低电平熄灭当前数码管
//1.位码处理
/*位码P4.08--P4.15*/
led_shift=1<<num;
FIO4SET1 |= led_shift;//选通
led_shift=FIO4PIN1 & 0xFF;//读取8位段码的状态
//2.段码处理
/*段码P4.00--P4.07*/
for(i=0;((SEG[i][1]!=data)&&i<24);i++);//查找段码表
temp=SEG[i][0];//观察变量
if(SEG[i][1]==data)//若有相应段码
{
FIO4CLR0 |=0xFF;//低电平熄灭当前数码管
FIO4SET0|=SEG[i][0];//置高电平,点亮相应字符相关位
}
else//错误处理
{
;
}
}
//函数名称 :array_led_group
//函数功能 :显示一组8个数据2ms--20ms
//入口参数 :
//出口参数 :无
void array_led_group(uint8* RcvBufPt)
{
uint32 i;
//显示一组8个数码管一次数据
array_led_count=4;//40ms定时
while(array_led_count)
{
for (i = 0; i < 8; i++) array_led(i,RcvBufPt[i]);
}
FIO4CLR1 |= 0xFF;//取消选中,输出低电平,经2803段码得到高电平
}
//函数名称:array_led_test
//函数功能:测试每一个功能函数
//入口参数
//出口参数
void array_led_test(void)
{
uint8 i;//,j;
//段码测试
for(i=0;i<8;i++)
{
FIO4CLR0 |= 0xFF;
FIO4SET0|=(1<<i);//置高电平,单独点亮每一位
DelayNS(100);
}//调试成功
//位码测试
FIO4SET1 |= 0xFF;//位码全部选中
FIO4SET0 |= 0xFF;//段码全部选中
DelayNS(100);
FIO4CLR1 |= 0xFF;//
FIO4CLR0 |= 0xFF;//
DelayNS(100);
FIO4SET1 |= 0xFF;//位码全部选中
FIO4SET0 |= 0xFF;//段码全部选中
for(i=0;i<8;i++)
{
FIO4CLR1 |= 0xFF;//
FIO4SET1 |=1<<i;
DelayNS(100);
}//测试通过
for(i=0;i<8;i++)
{
FIO4SET1 |= 0xFF;//位码全部选中
FIO4CLR1 |=1<<i;
DelayNS(100);
}//测试通过
DelayNS(100);
array_led(0,'0' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(1,'1' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(2,'2' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(3,'3' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(4,'4' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(5,'5' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(6,'6' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
array_led(7,'7' );//右起第0->7共8个位置,显示字符0
DelayNS(100);
//以上测试通过
array_led_buf[0]='0';
array_led_buf[1]='1';
array_led_buf[2]='2';
array_led_buf[3]='3';
array_led_buf[4]='4';
array_led_buf[5]='5';
array_led_buf[6]='6';
array_led_buf[7]='7';
array_led_group(array_led_buf);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -