×
单片机 > 单片机程序设计 > 详情

51数码管动态显示程序-------调试经验

发布时间:2020-05-28 发布时间:
|

  今儿学习了动态数码管显示的知识,其实很简单,只要是首先让数码管逐个显示1,2,3,4...间隔1秒钟,用定时器0控制时间,未选也用一个table数组表示出来,然后减小间隔时间,我这用的是5ms显示效果不错,利用人眼的视觉暂留(<20ms),将东西完全显示在数码管上。

  注意:如果在设计硬件电路时候,有雨动态显示数码管时候,亮度较静态显示时候低,所以,限流电阻应取小一些。(具体电路网上应该找得到)

  调试经验如下:

  1.若keil调试出现乱码,还有出现invalid ...path原因:(1)工程文件名是否存在中文,最好修改为英文;(2)程序文件中是否出现中文状态下的字符,建议自己编写,或者直接在自己存放的子函数中(.c文件)直接复制粘贴过来

  2.中断服务程序中莫忘aa++;否则定时器不起作用

/*
####################################################
数码管(共阴)
  段选位 P2口
  片选位 P1.2  P1.1  P1.0
  格式         dp g f e d c b a

P1口(片选位):
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
 位1  位2  位3  位4  位5  位6  位7  位8
P2口(数据位):
0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f
  0    1    2    3    4    5    6    7    8    9
0x77 0x7c 0x39 0x5e 0x79 0x71 
  A    B    C    D    E    F
####################################################
*/
#include
#define uchar unsigned char
#define uint unsigned int

uchar code duan[]={0x3f,0x06,0x5b,0x4f,
       0x66,0x6d,0x7d,0x07,
       0x7f,0x6f,0x77,0x7c,
       0x39,0x5e,0x79,0x71};
uchar code wei[]={0x00,0x01,0x02,0x03,
      0x04,0x05,0x06,0x07};

uchar numwe,numdu,aa;

void main ()
{
 /*# 定时器0初始化 #*/
 TMOD=0x01;            //1.选择定时器0,工作方式1(16位定时器,最大值65536)
 TH0=(65536-10000)/256; //2.对寄存器赋初值
 TL0=(65536-10000)%256;
 EA=1;
 ET0=1;
 TR0=1; 

 numwe=0;              //段位赋初值
 numdu=1;

 while(1)
 {  
  P1=wei[numwe];   //第1位数码管显示1
  P2=duan[numdu];
  if(aa==1)
  {
   aa=0;
   if(numwe==8)
    numwe=0;
   numwe++;
   P1=wei[numwe];
   if(numdu==8)
    numdu=0;
   numdu++;   
   P2=duan[numdu];
  } 
 }  
}

void timer0() interrupt 1
{
 TH0=(65536-5000)/256; //中断服务程序中记得要对寄存器重装初值哦!
 TL0=(65536-5000)%256;
 aa++; 
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向