⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array_led.c

📁 LPC2378
💻 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 + -