专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

数码管1秒钟自动加1

作者:李俊轩   来源:本站原创   点击数:  更新时间:2013年07月18日   【字体:

今晚注定是个无眠之夜,人需要有一种信念,并为之努力,如果能够这样的话,我想再大的困难也不是什么困难了,今天晚上看了亚运会开幕式,除了感叹国家进步,作为一个广东人,也很骄傲以外,我更看重的是晚会上的场景,几乎百分之七十(这个数字是比较保守的估计)以上都使用到了LED灯技术,看完以后很兴奋,不仅感概当初没有选错专业,这不正是我们电子类的东西吗?很多东西都要用到电子,我们的世界,因为有了电子,有了单片机,而让我们的生活变得丰富多彩了。

看着里面的LED灯变幻莫测的样子,真的想自己编点东西会“动一动”的,呵呵,所以把今天学到的数码管动态显示再加以应用了,虽然这个程序搞了很久,但却成功了,呵呵,得出的结论是,一个成功是由无数的失败换来的,值!

下面是我编的一个程序,实现数码管在0至100之间,数码管以1秒的速度自动加1;程序如下:#include<reg52.h>
unsigned char table[]=  { //数码管数组显示内容
      0x3f,
      0x06,
      0x5b,
      0x4f,
      0x66,
      0x6d,
      0x7d,
      0x07,
      0x7f,
      0x6f
      };
int shi,ge,bai,a;  //定义变量
unsigned int temp=0; //给数码管赋初值
void timer1();//显示程序调用声明
void delay()//数码管位选定时约1MS
{
 int i,j;
 for(i=1;i>0;i--)
  for(j=120;j>0;j--);
}
void main()
{
 TMOD |= 0x10; //定时设置的打开
 TMOD &= 0xdf;
 TH1 = (65536-50000)/256;
 TL1 = (65536-50000)&256;
 ET1 = 1;
 TR1 = 1;
 while(1) //实现位选和段选的操作及调用
 {
  bai =temp/100;
  shi = temp%100/10;
  ge = temp%10;
  timer1();
  P0 = 0x00;
  P1 = table[bai];
  delay();
  P0 = 0x01;
  P1 = table[shi];  
  delay();
  P0 = 0x02;
  P1 = table[ge];
  delay();
    }
}
void timer1() //段选内容,实现1S自动加1功能

 if(TF1==1)
 {
  TF1=0;
  TH1 = (65536-50000)/256;
  TL1 = (65536-50000)&256;
  a++;
  if(a==20)
  {
   a=0;
   temp++;
   if(temp==100)
   temp=0;
  }
 }
}

当然,还是声明,我的开发板是由P0.1至P0.3控制位选的,由P1口控制段选内容的。

关闭窗口

相关文章