找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6097|回复: 0
打印 上一主题 下一主题
收起左侧

数码管中断显示+高位灭零处理

[复制链接]
跳转到指定楼层
楼主
ID:80436 发表于 2015-5-21 23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //清理硬盘时发现自己以前写的,贴上来吧,虽然没什么水平,
  2. //5毫秒一个显示周期,理论上显示20位数码管不会有闪烁感,
  3. 占用了一个定时器,简约的算法实现高位灭零处理
  4. #include <avr/io.h>
  5. #include <avr/interrupt.h>
  6. unsigned int flag=0;
  7. unsigned char count=0;
  8. unsigned int num=0;
  9. //==================================================
  10. const unsigned char seg[]={        0xC0, // 0
  11. 0xF9, // 1
  12. 0xA4, // 2
  13. 0xB0, // 3
  14. 0x99, // 4
  15. 0x92, // 5
  16. 0x82, // 6
  17. 0xF8, // 7
  18. 0x80, // 8
  19. 0x90 // 9
  20. };


  21. //==================================================

  22. //IO端口初始化
  23. void PortInit(void)
  24. {
  25. DDRA=0XFF;
  26. PORTA=0X00;
  27. DDRB=0XFF;
  28. PORTB=0XFF;
  29. }

  30. //Timer0初始化
  31. void Timer0Init(void)
  32. {
  33. TCCR0 = 0x00; //stop
  34. TCNT0 = 0x06; //set count
  35. OCR0  = 0xFA;  //set compare
  36. TCCR0 = 0x03; //start timer
  37. }

  38. //==================================================

  39. //定时器0溢出中断服务程序
  40. ISR(TIMER0_OVF_vect)
  41. {
  42. TCNT0=0X06;
  43. flag++;
  44. count++;
  45. switch(count)
  46. {
  47. case 1:if(num/1000){PORTA=0X01;PORTB=seg[num/1000];}else PORTB=0XFF;break;
  48. case 2:if(((num/1000)+(num%1000/100))){PORTA=0X02;PORTB=seg[num%1000/100];}else PORTB=0XFF;break;
  49. case 3:if(((num/1000)+(num%1000/100)+(num%100/10))){PORTA=0X04;PORTB=seg[num%100/10];}else PORTB=0XFF;break;
  50. case 4:PORTA=0X08;PORTB=seg[num%10];break;
  51. case 5:count=0;break;
  52. default:break;
  53. }
  54. if (flag==100)
  55. {
  56. flag=0;
  57. num++;
  58. if(num==9999)
  59. {
  60. num=0;
  61. }
  62. }
  63. }

  64. //==================================================

  65. //主函数
  66. int main(void)
  67. {
  68. cli();
  69.     TIMSK = 0x01; //timer interrupt sources
  70. PortInit();
  71. Timer0Init();
  72. sei();
  73. while(1)
  74.       {
  75.         ;
  76. }
  77. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表