历史上的今天
返回首页

历史上的今天

今天是:2025年02月02日(星期日)

2020年02月02日 | MSP430学习笔记6-动态数码管的显示

2020-02-02 来源:eefocus

这个程序主要部分是我改写的,程序把看门狗当做普通定时器使用,在看门狗中断中进行数码管扫描,另外我加入了显示的缓冲区,想在数码管上显示什么数字只需要对缓冲数组中的值进行操作即可。最后加入了小数点的操作,可以很方便的加入小数点,程序如下:

/**********************************************

程序功能:在八位数码管上显示任意数字

-----------------------------------------------

拨码开关设置:将SMG位拨至ON,其余拨至OFF

测试说明:观察数码管显示

***********************************************/

#include 

typedef unsigned char uchar;


//数码管7位段码:0--f

uchar scandata[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

                      0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//段码

uchar dispbitcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//将端口的片选信号编码

uchar disbuf[8] = {8,8,1,3,1,9,4,2};//存放要显示的数据

//记录显示位数的全局变量

uchar cnt = 0;//用来扫描计数

uchar dotn = 2;//用来选择第几位后面显示小数点


/********************主函数********************/

void main(void)

{

    /*下面六行程序关闭所有的IO口*/

    P1DIR = 0XFF;P1OUT = 0XFF;

    P2DIR = 0XFF;P2OUT = 0XFF;

    P3DIR = 0XFF;P3OUT = 0XFF;

    P4DIR = 0XFF;P4OUT = 0XFF;

    P5DIR = 0XFF;P5OUT = 0XFF;

    P6DIR = 0XFF;P6OUT = 0XFF;

  

    //这里面看门狗用作普通的定时器,要来对数码管进行动态扫描,如果看门狗有其他作用

    //可以用定时器代替

    WDTCTL = WDT_ADLY_1_9;        // 设置内部看门狗工作在定时器模式,1.9ms中断一次

    //可以去看头文件中具体的配置,这里使用的手表晶振64分频计算可得是1.9ms

    IE1 |= WDTIE;                 // 使能看门狗中断

    

    P6DIR |= BIT2;P6OUT |= BIT2;  //关闭电平转换

  

    P5DIR = 0xff;                 //设置P4,P5的IO方向为输出

    P4DIR = 0xff;                 

  

    P5OUT = 0x00;                 //设置P4,P5的输出初值

    P4OUT = 0xff;

  

    _BIS_SR(LPM3_bits + GIE);     //CPU进入LPM3低功耗模式,同时打开全局中断

    //这个地方要注意LPM3低功耗模式下其他时钟源是关闭的,只能使用ACLK时钟源

}


/*******************************************

函数名称:watchdog_timer

功    能:看门狗中断服务函数,在这里输出数码管的

          段选和位选信号

参    数:无

返回值  :无

********************************************/

#pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void)

    P4OUT = 0xff;

    uchar temp;

     if(cnt == (dotn-1))//判断要不要显示小数点

    {

      temp = scandata[disbuf[cnt]]&0x7F;//如果要显示的就将要显示的段码先进行一步运算

      P5OUT = temp;

    }

    else

    P5OUT = scandata[disbuf[cnt]];        //输出段选信号

    P4OUT ^= dispbitcode[7-cnt];           //输出位选信号由于用了三极管驱动,实际是低电平选通因此翻一下。

    //发现显示的顺序是倒着的,减一下把顺序正过来

    cnt++;                        //位计数变量在0~8之间循环

    if(cnt == 8) cnt = 0;

    

}



推荐阅读

史海拾趣

AirBorn公司的发展小趣事

在航空航天领域,AirBorn的产品广泛应用于飞机、导弹系统、通信设备等关键领域。为了满足航空航天领域对连接器的严苛要求,AirBorn不断投入研发力量,推出了一系列具有高性能、高可靠性的连接器产品。这些产品不仅满足了航空航天领域的需求,还为公司带来了可观的收益。

Davico Industrial Ltd公司的发展小趣事

在航空航天领域,AirBorn的产品广泛应用于飞机、导弹系统、通信设备等关键领域。为了满足航空航天领域对连接器的严苛要求,AirBorn不断投入研发力量,推出了一系列具有高性能、高可靠性的连接器产品。这些产品不仅满足了航空航天领域的需求,还为公司带来了可观的收益。

Delta Electronics公司的发展小趣事

除了电源管理技术外,Delta在工业自动化领域也取得了重要突破。公司开发了一系列工业自动化产品和解决方案,如变频器、PLC、HMI等,广泛应用于机械制造、自动化生产线等领域。这些产品和解决方案不仅提高了生产效率,降低了生产成本,还为客户提供了更加智能化、自动化的生产方式。

E-Z-HOOK公司的发展小趣事

在1956年的一个晴朗午后,E-Z-HOOK的创始人阿尔伯特·史密斯(化名)在实验室里遇到了一个棘手的问题。他正在测试一个复杂的电子系统,但发现现有的测试工具无法满足他的需求。于是,他动手设计并制造出了第一个E-Z-HOOK测试钩,这个简单但实用的工具极大地方便了他的工作。史密斯看到了这个产品的巨大潜力,于是决定成立一家公司来专门生产这种测试钩。这就是E-Z-HOOK公司的起源。

Diplohmatic A/S公司的发展小趣事

Diplohmatic A/S公司最初是一家小型电子元件分销商,但其创始人对技术创新的执着追求引领了公司的转型。在一次偶然的机会中,公司研发团队发现了一种新型半导体材料,这种材料在能效和稳定性上远超市场同类产品。经过数月的研发和测试,公司成功将这种材料应用于新型电源管理芯片中,并迅速获得了市场的认可。这一创新不仅为公司带来了丰厚的利润,也奠定了其在电子行业的技术领先地位。

Aten International公司的发展小趣事

在电子行业中,标准化建设对于提升产品质量和企业竞争力具有重要意义。Aten International深知标准化建设的重要性,因此在产品研发和生产过程中始终坚持高标准、严要求。公司还积极参与国际标准化组织的活动,推动相关标准的制定和完善。正是凭借在标准化建设方面的卓越表现,Aten International赢得了业界的高度认可和广泛赞誉。

以上五个故事虽然基于虚构,但它们都反映了Aten International在电子行业发展的真实情况。这些故事展示了公司在技术创新、市场拓展、标准化建设等方面的努力和成就,也体现了Aten International在电子行业中的领先地位和卓越贡献。

问答坊 | AI 解惑

单片机控制实时时钟X1226的应用设计[ZT]

单片机控制实时时钟X1226的应用设计[ZT] 引 言 X1226具有时钟和日历的功能,时钟依赖时、分、秒寄存器来跟踪,日历依赖日期、星期、月和年寄存器来跟踪,日历可正确通过2099年,具有自动闰年修正。 拥有强大的双报警功能,能够被设置到 ...…

查看全部问答>

再见了,可恶的漏气误报

在04年刚刚毕业时,有幸进入了TPMS行业,和几个同时兴致勃勃的干了起来,当时并不知道TPMS是个什么东西,也不会象现在这样对行业有什么研究,只知道把工作做好,拿到应得的工资,但也是拉开了大干一场的架势,毕竟刚毕业,对技术也是很有神秘感,特 ...…

查看全部问答>

我想学习linux下电源管理,有没有前人知道acpi方面的资料,能全面点的最好

我想学习linux下电源管理,有没有前人知道acpi方面的资料,能全面点的最好啊…

查看全部问答>

请问哪位高手有 Ibuyspy delivery 2005 的Sample可以提供?谢谢!

Ibuyspy Delivery 2005,VS2005和SQL2005用于WINCE应用的开发范例。 原来的GOTDOTNET已经找不到这个下载了,MSDN上也没有,请问哪位高手可以给一个这个Sample的安装包,谢谢 地址或者发邮件都可以。 junzhu@ymail.com…

查看全部问答>

WinCE下基于Directshow的摄像头驱动的开发

在做WinCE相关的工作,想在DShow的框架下面使用摄像头,但是似乎比较困难。 首先因为在WinCE5/6,微软好像把Camera这一个模块单独提取出来,写了一个完整的MDD和一个空壳的PDD 现在要开发自己的饿摄像头驱动,其实个人感觉就是实现PDD中的功能就O ...…

查看全部问答>

急聘:硬件研发工程师

1. 本科以上学历,计算机、电子相关专业 2. 善于沟通,工作认真负责并具备较强的分析和解决问题的能力,有独立工作能力 3. 良好的高速数字电路设计以及数字模拟混合电路设计基础,良好的高速PCB设计基础 5. 熟悉视频相关电路,熟悉FPGA开发与 ...…

查看全部问答>

打算买十片103C8T6的,卖家要一片22块钱整,贵吗?

                                 打算买十片103C8T6的,卖家要一片22块钱整,贵吗?…

查看全部问答>

AVR ATMEGA16 矩阵键盘

大家好,我是一个AVR初学者,变了一个数码管动态显示矩阵键盘的值的程序,是用AVR-GCC编的,但是显示不了值,但我将头文件改了,在ICCAVR上就可以正常显示。求各位大侠帮我解决下,希望在AVR-GCC上能够正常运行,小弟将非常感谢!#include <avr/i ...…

查看全部问答>

stm32f107以太网PING大包死掉

如题:当ping 1000字节包的时候是正常的,当ping 10000字节包的时候,以太网死掉,此时ping 32字节的包也ping不通,我找到底层程序内的定义,最大包长为1500字节,但我能不能不改这个数,ping 10000字节包的时候ping不通过,但我通过ping通1500之内 ...…

查看全部问答>

求助:CCS5.2怎么通过点小锤子就能修改编译模式

最近在使用CCS5.2玩28069,发现CCS5.2的小锤子可以选RAM模式和Flash模式,在C2000 Launchpad的例程里找到了这样的用法,但是自己新建的工程怎么也弄不成,有没有弄过的说一下怎么配置的!…

查看全部问答>