历史上的今天
返回首页

历史上的今天

今天是:2025年04月18日(星期五)

正在发生

2018年04月18日 | MSP430学习笔记6-动态数码管的显示

2018-04-18 来源:eefocus

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


  1. /********************************************** 

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

  3. ----------------------------------------------- 

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

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

  6. ***********************************************/  

  7. #include    

  8. typedef unsigned char uchar;  

  9.   

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

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

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

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

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

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

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

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

  18.   

  19. /********************主函数********************/  

  20. void main(void)  

  21. {  

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

  23.     P1DIR = 0XFF;P1OUT = 0XFF;  

  24.     P2DIR = 0XFF;P2OUT = 0XFF;  

  25.     P3DIR = 0XFF;P3OUT = 0XFF;  

  26.     P4DIR = 0XFF;P4OUT = 0XFF;  

  27.     P5DIR = 0XFF;P5OUT = 0XFF;  

  28.     P6DIR = 0XFF;P6OUT = 0XFF;  

  29.     

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

  31.     //可以用定时器代替  

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

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

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

  35.       

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

  37.     

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

  39.     P4DIR = 0xff;                   

  40.     

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

  42.     P4OUT = 0xff;  

  43.     

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

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

  46. }  

  47.   

  48. /******************************************* 

  49. 函数名称:watchdog_timer 

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

  51.           段选和位选信号 

  52. 参    数:无 

  53. 返回值  :无 

  54. ********************************************/  

  55. #pragma vector=WDT_VECTOR  

  56. __interrupt void watchdog_timer(void)  

  57. {   

  58.     P4OUT = 0xff;  

  59.     uchar temp;  

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

  61.     {  

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

  63.       P5OUT = temp;  

  64.     }  

  65.     else  

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

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

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

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

  70.     if(cnt == 8) cnt = 0;  

  71.       

  72.       

  73. }  



推荐阅读

史海拾趣

Continental公司的发展小趣事

随着汽车工业的发展,大陆集团开始将业务扩展到汽车轮胎领域。1901年,马牌轮胎首次与德国戴姆勒·奔驰汽车公司合作参加汽车竞赛,这标志着大陆集团正式进入汽车轮胎市场。仅仅三年后,大陆集团就生产出了全世界第一条带花纹的汽车轮胎,这一创新大大提高了轮胎的抓地力和安全性。1908年,大陆集团又生产出了全世界第一个可拆装的车轮,使车轮和车轴分开,由此大大节省了换轮胎的时间。这些技术创新使得大陆集团在汽车轮胎市场上占据了重要地位。

Advanced Optoelectronic Technology Corp公司的发展小趣事

在光电技术领域,AOTC始终保持领先地位。公司不断推出创新产品,如高效能的光电传感器、智能照明系统等,这些产品不仅提升了人们的生活品质,还推动了整个电子行业的变革。AOTC的技术创新得到了业界的广泛认可,公司逐渐成为了行业的领军企业。

Blaze Display Technology Co Ltd公司的发展小趣事

随着技术的不断进步,Blaze公司意识到要想在激烈的市场竞争中立于不败之地,必须不断进行技术创新和品质升级。因此,公司加大了研发投入,引进了一批高端技术人才和先进设备,成功研发出了多项具有自主知识产权的核心技术。同时,公司还严格把控产品质量,确保每一块显示屏都达到行业领先水平。

Essentra Components公司的发展小趣事

面对日益激烈的市场竞争,Essentra Components公司决定实施全球化战略,以拓展更广阔的市场。公司先后在亚洲、欧洲、美洲等多个地区设立了生产基地和销售服务点,实现了产品的全球覆盖。同时,公司还积极与当地企业合作,共同开发适合当地市场需求的产品,进一步巩固了其在全球市场的地位。

ETI Systems公司的发展小趣事

ETI Systems公司自创立之初,就专注于研发具有创新性的电子产品和解决方案。在公司发展的早期,它推出了一款高性能的无线通信设备,该设备采用了当时最先进的信号处理技术,极大地提升了数据传输的效率和稳定性。这一创新产品不仅帮助ETI Systems在市场上获得了良好的口碑,也引领了整个行业的技术发展方向。

Ememory Technology Inc公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,eMemory始终保持着对新技术和新市场的敏锐洞察力。公司不断推出新的硅智财产品和解决方案,以满足客户不断变化的需求。同时,eMemory还积极拓展国际市场,与全球多家知名芯片设计厂商建立了长期稳定的合作关系。这些努力使得eMemory在电子行业中保持着领先地位,并为其未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

如何巧妙应对超声设备“死机”故障 ?

超声设备的“死机”故障如同计算机常碰到的“死机”故障一样,有时会通过关机,然后再开机,机器就会正常工作。但有时“死机”现象无论通过什么应急手段都排除不了,在这种清况下,维修工作者切不可心急,应耐心细致的去查找“死机”故障形成的原因 ...…

查看全部问答>

delphi 中 如何通过DDE或者其他简单的方法 获取 组态王中的变量,谢谢

我在做一个小东西,我想在delphi 中通过DDE或者其他简单的方法 获取 组态王中的变量,请哪位大师指导一下,谢谢了…

查看全部问答>

ARM子程序里再调用函数的问题

有人能给个ARM子程序里面在调用函数的例子吗 子程序的返回值应该是 MOV PC LR 那调用函数的返回值应该是什么 最好能给个完整的例子 先谢了!…

查看全部问答>

谁有USB2.0协议的中文版?

谁有USB2.0协议的中文版,帮忙给小弟发一份,谢谢! husthj323@qq.com…

查看全部问答>

问个最最最最最基本的问题

什么叫驱动啊 是不是如果有个设备,通过串口与电脑相连 把数据写成固定的帧,通过串口发给电脑,电脑再识别这个帧的格式进行相应操作 规定这些帧的格式和操作就是写驱动啊 哪里有关于这方面的教材和代码呢…

查看全部问答>

国内自主研发高性能PLC,集成DA,AD模块

国内自主研发高性能PLC,集成DA,AD模块资料下载   已包含配套编程软件与用户手册  …

查看全部问答>

A版本芯片和Z版本具体有什么区别

                                 一不小心买到了A版本的STM32F103芯片,现在发现不能扇区擦除,只能片擦除。请问还有什么区别,哪有详细说明?…

查看全部问答>

STM32F USB中断唤醒异常问题

我的问题就是:以WFI方式进入停止模式后,现用外部中断和USB的wakeup中断两种方式唤醒,用外部中断唤醒后设备能正常工作,可以随时唤醒; 用USB唤醒后设备不能正常工作,不能建立USB正常通讯     void USBWakeUp_IRQHandler(void)& ...…

查看全部问答>