lpc2131 arm 驱动数码管 程序

 

                                                     仿真效果图

 

我写的一个秒的计时程序,使用了向量中断模式,把秒显示在数码管上。发表在空间表示我在学习,没有颓废**/
/*****************************此次实验用的是LPC2132,晶振是12MHz,当然,周立功公司在程序前面是有7 ARM7板底层个文件,和启动文件,在这里不能列出****************************************************************/
#include "config.h"
#define   key1 (1<<25)   // P0.25 ,
/************数码管显示代码和数码管位显示的代码*****************************************///
unsigned int num_code[]={0xff00003f,0xff000006,0xff00005b,0xff00004f,0xff000066,0xff00006d,0xff00007d,0xff000007,0xff00007f,0xff00006f};
unsigned int wei[]={0xfffe0000,0xfffd0000,0xfffb0000,0xfff70000};//定义位选的列表,32位的数值
/***************************************************************************************/
unsigned char n=0;//秒计数变量,8位
/*******************************************************************************************
** 函数名称 : DelayNS()
** 函数功能 : 长软件延时。
** 入口参数 : dly  延时控制值,值越大延时越长
** 出口参数 : 无
******************************************************************************************
*/
void  DelayNS(uint32  dly)//延时函数
{  uint32  i;

   for(; dly>0; dly--)
      for(i=0; i<3400; i++);//初定为3400个自减变量,用于数码管延时显示
}

/***************************************数码管显示程序********************************************/
void display(unsigned int x)
{
 unsigned int i;
 unsigned int dis_num[4];
 unsigned int temp;
 temp=x;
 for(i=0;i<4;i++)  //限定4位显示
 {
  dis_num[i]=temp%10; //把最低位的模取出来
  temp=temp/10;  //把要显示的数值缩小十倍
  IO0CLR=0xffffffff; //把低8位和位(位控制端的高8位同时清空为0000
  IO0SET=num_code[dis_num[i]]; //送往P0.0-P0.8显示
  IO0SET=wei[i];  //位的切换
  DelayNS(2);
 }
}
/*
*********************************************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_Timer0 (void)//中断格式和函数名字在LPC的底层和开始文件定义了
{
 n++;
 if (n >= 60)
  n=0;   /*判断你的值,使其少于60         */
 
 T0IR = 0x01;    /* 清除中断标志         */
 VICVectAddr = 0x00;   /* 通知VIC中断处理结束       */
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :使用定时器实现1秒钟定时,控并且在led数码管上显示。中断方式。
** 调试说明 :
*********************************************************************************************************
*/
int main(void)
{
 uint32 temp_key;//按键定义,此程序未用到
 
 PINSEL0 = 0x00000000; // 设置P0.0~P0.15为GPIO功能
 PINSEL1 = 0x00000000; // 设置P0.16~P0.31为GPIO功能
 
 IO0DIR  = 0xffffffff;   // 设置BEEP控制口P0.7为输出模式,(P0的)其它I/O为输入模式
 IO0SET  = 0xffffffff;   // 控制BEEP(P0.7)输出高电平1
 
 IRQEnable();     /* IRQ中断使能,此函数的定义在底层驱动文件中 */
 
 // 由于LPC2131的P0口的I/O与其它功能复用,比如P0.7与PWM2、SSEL0、EINT2复用,
    // 所以要先设置管脚连接。把口线设置为GPIO功能时,才能进行I/O控制。
 
 /* 定时器0初始化 */
 T0TC   = 0;   /* 定时器设置为0          */
 T0PR   = 0;   /* 时钟不分频           */
 T0MCR  = 0x03;  /* 设置T0MR0匹配后复位T0TC,并产生中断标志    */
 T0MR0  = Fpclk / 2; /* 0.5秒钟定时,据蓝鸟说,如是Fpclk / 1,就是一秒           */
 T0TCR  = 0x01;  /* 启动定时器           */
 
 /* 设置定时器0中断IRQ */
 VICIntSelect = 0x00;    /* 所有中断通道设置为IRQ中断   */
 VICVectCntl0 = 0x20 | 0x04;   /* 设置定时器0中断通道分配最高优先级 */
 VICVectAddr0 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址     */
 VICIntEnable = 1 << 0x04;   /* 使能定时器0中断      */
 
  while(1)
  { 
   display(n);//不停的显示数值
  }
  return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
一、实验目的   (1)通过实验掌握 LED 的显示控制方法;   (2)巩固实验 4.1 中所掌握的对存储区进行访问的方法;   二、实验设备   硬件: Embest EduKit-III 实验平台, Embest ARM 标准/ 增强型仿真器套件,PC 机   软件:Embest IDE Pro ARM集 成开发环境, Windows 98/2000/NT/XP     三、实验内容   编写程序使实验板上八段数码管循环显示 0 到 9 字符   四、实验原理   嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。   (1)结构   八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母   (2)工作原理   以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。电平信号按照dp,g,e, a 的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表   (3)显示方式   八段数码管的显示方式有两种,分别是静态显示和动态显示。静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约 1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mynameislinduan

你的鼓励是我最大动力写博客不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值