| 
 
| 小弟用定时器做的秒表为什么能在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;
 }
 }
 }
 | 
 |