MSP430学习笔记6-动态数码管的显示-阿里云开发者社区

开发者社区> 文艺小青年> 正文

MSP430学习笔记6-动态数码管的显示

简介:
+关注继续查看

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

  1. /********************************************** 
  2. 程序功能:在八位数码管上显示任意数字 
  3. ----------------------------------------------- 
  4. 拨码开关设置:将SMG位拨至ON,其余拨至OFF 
  5. 测试说明:观察数码管显示 
  6. ***********************************************/  
  7. #include  <msp430x14x.h>  
  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. }  

本文转自emouse博客园博客,原文链接:http://www.cnblogs.com/emouse/archive/2010/07/22/2198219.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java 专项练习【21- 30】(每日精进系列)
Java 专项练习【21- 30】(每日精进系列)
6 0
安装Code-Server 4.0.1 的一些经验
在服务器上面安装自己的Code-Server,实现随时随地在任何终端任何地点,只要客户端的浏览器支持而且有网()就可以获得统一的编程体验
19 0
史上最全VSCode插件,怪不得写代码头疼,VSCod安装与配置(适合小白)
史上最全VSCode插件,怪不得写代码头疼,VSCod安装与配置(适合小白)
7 0
用汇编分析C++程序,x86汇编
  说到用汇编的眼光看C++语言,那么怎么阅读汇编代码就成了我们需要解决的一个问题。其实,实话说,汇编其实不难。只是我们需要明白这样几个问题:   (1)汇编是什么语言?   (2)汇编中的主要内容有哪些?   (3)汇编语言是怎么和实际C/C++语言代码一一对应的?
5 0
Synchronized 底层实现
关于synchronized的底层实现,网上有很多文章了。但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结、照搬而成,难免有些错误;要么很多点都是一笔带过,对于为什么这样实现没有一个说法,让像我这样的读者意犹未尽。
10 0
JAVA语言与C++语言的主要区别和不同点
JAVA语言与C++语言的主要区别和不同点
4 0
Spring Boot 使用 Swagger3 生成 API 接口文档
Spring Boot 使用 Swagger3 生成 API 接口文档
9 0
独家深度 | 那些年我做开源和自研走过的弯路和经验
本文将重点分享开源结合自研项目的一些经验。
18 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载