时钟加中间两个时钟点的问题
最近写时钟程序,写到最后就是想不到怎么加时钟数码管中间的那两个时钟点,试过很多次了,昨天试了一天都没能写出来。。。太悲剧了。没办法,只好来请教大家啦!拜托指引小弟啊。。。。 这是现在写的程序#include<reg51.h>
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
unsigned int s,fen;
delay(unsigned int x)
{
for(;x>0;x--);
}
void TimerInit()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void disp()
{
P0=0xff;
P2=duan;
P0=0xfe;
delay(100);
P0=0xff;
P2=duan;
P0=0xfd;
delay(100);
P0=0xff;
P2=duan;
P0=0xfb;
delay(100);
P0=0xff;
P2=duan;
P0=0xf7;
delay(100);
}
void main()
{
fen=12; // 初始化
s=0;
TimerInit();
while(1)
{
disp();
}
}
void Timer0() interrupt 1
{
static unsigned char count = 0;
count++;
if(count==20) // 1s
{
count=0;
s++;
}
if(s==60)
{
s=0;
fen++;
}
if(fen==60)
{
fen=0;
}
TL0 =(65536-50000) % 256;
TH0 =(65536-50000) / 256
} 我的大体思路
现在是秒和分显示,想先调出让秒自增的时候,中间两个时钟点闪烁,频率和秒一样,然后我再把秒和分显示改为分和小时显示,这样中间的时钟点作为秒计数显示。下面是时钟数码管的样子。
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_615732YCFFH5.jpg
(原文件名:20085218292137277.jpg) 如果控制冒号的段为第2个位选的小数,就这样写,注意要把中断服务函数里的count定义为全局变量
P0=0xff;
if (count < 10)
P2=duan&0x7F;
else
P2=duan;
P0=0xfd;
delay(100); 冒号的段是两个位控制的,上面一个点是0xfe,下面一个点是0xfd,要控制两个点同时显示就是0xfc吧,我开了冒号的位好像秒显示也会受影响,消影也没用、、、、 0xFC显示冒号? 有问题吧你还是查下资料
我的用的是这款
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_615737GFJ0Q3.jpg
(原文件名:数码管资料.jpg)
部分代码如下
//显示函数,显示缓冲区内容
void Display(void)
{
unsigned char a;
for (a=0; a<4; a++)
{
if (DisPot && a==1 && time50<10 ) //如果允许显示冒号,且当前选通
SegPort( DisBuff & 0x7F ); //第2位,且处于前半秒时,显示冒号
else
SegPort( DisBuff );
SegSel(a);
Delayms(5);
SegSel(0xFF); //关闭选通,防止重影
}
} 谢谢LS指教!我已经找到解决的方法了 什么方法 LZ 一般时钟型数码管中间两个点的本质就是左边数起第二个8的小数点
页:
[1]