打印

用定时器做的秒表,求数码管高手指教

[复制链接]
2916|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
darlin520|  楼主 | 2012-6-10 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟用定时器做的秒表为什么能在1602液晶上显示却不能在数码管上显示呢,原理是一样的呀??
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit  du=P2^6;     // 数码管段选
sbit  wei=P2^7;    //数码管位选
uchar code table[]={0x3f  , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d ,0x7d , 0x07 , 0x7f  , 0x6f};      //共阴数码管码表
uchar ms;     
uchar miao;
uchar i,j,k,l;     //留给数码管分段显示用
void delay(uint z)    //延时函数
{
  uint i,j;
   for(i=z;i>0;i--)
    for(j=110;j>0;j--);
}
void main()
{
  ms=0;
  miao=0;
while(1)
{
  i=ms/10;      //用i来放ms的十位,
  j=ms%10;   //用j来放ms的个位
  k=miao/10;  //用K来放miao的十位
  l=miao%10;  //用l来放miao的个位
       TMOD=0x01;     // 设置定时器0 为工作方式方1
  TH0=(65536-9174)/256;    //装初值,11.0592MHZ的机器周期是1.09us,计9174次刚好约10ms
   TL0=(65536-9174)%256;   //装初值
     EA=1;       //开总中断
    ET0=1;       //开定时器T0中断
   TR0=1;       //打开定时器T0;


du=1;           //打开段选
P0=table[k];      //把秒的十位数给P0显
   du=0;       //关闭段选,因为用到了锁存器,段选和位选都用到了P0
   P0=0xff;       //消影
   wei=1;       //打开位选
   P0=0xfe;               //选中第一个数码管
   wei=0;      //关闭位选
   delay(1);     //延时
   

du=1;
   P0=table[l];         //把秒的个位给P0显示
du=0;
   P0=0xff;
    wei=1;
   P0=0xfd;           //选中第2个数码管
    wei=0;
   delay(1);
   
   
    du=1;
P0=table;   //把0.1s给P0显示
du=0;
   P0=0xff;
    wei=1;
   P0=0xfb;           //选中第3个数码管
    wei=0;
   delay(1);


  du=1;
   P0=table[j];    //把0.01s给P0显示
du=0;
   P0=0xff;
    wei=1;
   P0=0xf7;           //选中第4个数码管
    wei=0;
   delay(1);
}
}
void time0() interrupt 1
{
  TH0=(65536-9174)/256;
  TL0=(65536-9174)%256;     
     ms++;                       //每进入一次中断,0.01s位自加1、
         if(ms==100)
{
  ms=0;
   miao++;      //加到100次即1S时,秒变量自加1
   if(miao==100)    //加到100后秒变量清零
   {
    miao=0;
      }  
       }  
   }

相关帖子

沙发
forgot| | 2012-6-10 10:59 | 只看该作者
我晕,在数码管显示和在1602屏显是不一样的啊老大

你还是研究研究硬件吧,单片机编程都是根据硬件来定的,再说了,共阴还是共阳的数码管你都要搞清楚才可以

编程前首先要看好你要实现哪些IO口的控制和怎么控制,程序不是在什么地方都能用的

使用特权

评论回复
板凳
darlin520|  楼主 | 2012-6-10 11:23 | 只看该作者
我当然知道在数码管和在1602上是不一样的,硬件方面没有问题,是用动态扫描来实现。共阴共阳还没搞清楚我会拿上来问人吗??就是显示这一部分调不出来。

使用特权

评论回复
地板
joyme| | 2012-6-11 10:35 | 只看该作者
你把定时器的初始化代码放在While循环里,不知道你是怎么想问题的,这意味着程序永远也进不了中断。

使用特权

评论回复
5
darlin520|  楼主 | 2012-6-11 13:04 | 只看该作者
多谢大侠提醒,其实原来我用1602显示的时候并没有中断初始化函数放在while大循环里,后来用数码管显示时不小心忽略了这个问题,当局者迷啊。再次谢谢大好人。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

107

帖子

0

粉丝