IAP15W4K58S4驱动共阴极数码管

3 篇文章 0 订阅

IAP15驱动共阴极数码管


需要用IAP15W4K58S4来驱动一个共阴极的数码管。现在用数码管的少了,碰到应用,编写了一个数码管的驱动程序,供大家探讨。

1. 工作原理

IAP15是一款国产的MCU,频率最高达到30MHz,RAM为4K,略显小一点,但对于控制家电等设备基本够用。程序的思路是用定时器驱动数码管显示电路。需要轮流在一个总线上分时输出,选择的定时器时钟为100μs产生一次中断。在中断程序中计数,当计数值为50时,更新数码管的1位,计数值清零。在200ms完成一次4位数码管显示。

2. 程序


void Timer4Init(void)   //10毫秒@11.0592MHz
{ 
 T4T3M   |= 0x20;     //定时器时钟T模式
 T4L   = 0xAB;      //设置定时初值
 T4H   = 0xFB;      //设置定时初值
 T4T3M   |= 0x80;     //定时器4开始计时
 IE2   |= ET4;      // ET4 start
}

这个程序来自stc isp编程软件。

在这里插入图片描述
但要注意,这个程序中没有
IE2 |= ET4; 如果没有这个命令,定时器无法启动。

然后我们在中断程序中编写程序:

void timer4_ISR (void) interrupt TIMER4_VECTOR
{
// The Interrupt 10 ms once
/* ************************************************ */
/*   The interrupt routine is 100 μs once   */
/* ************************************************ */
 static int iLoRa001 = 0;
 static int iLoRa002 = 0;
// static int iLoRa003 = 0;
 u16 ucDisplay = 0;
 
 iLoRa002++;
if (iLoRa002 > 50 )
 {  
  switch ( uPos )
  {
   case 0x08 :      // Pos 1 display
    ucDisplay = uCurrent / 1000;   // 千位
    disLed(ucDisplay, false);
    DG1Low();
    uPos = 0x04;
    break;
   case 0x04 :         
    ucDisplay = uCurrent / 100 % 10;  // 百位
    disLed(ucDisplay, true);
    DG2Low();
    uPos = 0x02;
    break;
   case 0x02 : 
    ucDisplay = uCurrent / 10 % 10;   // 十位
    disLed(ucDisplay, false);
    DG3Low();
    uPos = 0x01;
    break;
   case 0x01  : 
    ucDisplay = uCurrent % 10;   // 个位
    disLed(ucDisplay, false);
    DG4Low();
    uPos = 0x08;
    break;   
   default :
    break;
  }
  iLoRa002 = 0;
 }
 
}

下面是要编制显示分程序和选通位程序。选通位程序就是四个DG1~DG4一个为低电平,其余的3个为高电平,要输出那个位就将响应的位变为低电平。disLed的程序如下:

void disLed(u8 u8Data, BOOL dp)
{
 u8 xIN = 0;
 if ( u8Data < 16 )
 {
  xIN = table[u8Data];
  P43 = getBit(xIN, 0);   // A
  P23 = getBit(xIN, 1);   // B
  P21 = getBit(xIN, 2);   // C
  P42 = getBit(xIN, 3);   // D
  P41 = getBit(xIN, 4);   // E
  P20 = getBit(xIN, 5);   // F
  P22 = getBit(xIN, 6);   // G
  P44 = dp;      // DP
 }
}

3. 执行程序

程序执行,显示串口输入的数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值