至于显示就更简单了。因为你使用的是数码管。所以不需要设置字模块。另外观看电路发现是使用译码器的。就更简单了。至于程序。网上搜素。会有一大把。至于用不用中断。完全看你的需要。如果只是单纯的倒计时是可以不用的最。
这个和代码顺序有关系:
while (1){
if (flag1s == 1) //判断1秒定时标志
{
flag1s = 0; //1秒定时标志清零
sec--; //秒计数自减1这里是先减一,后面再送显示
//将sec按十进制位从低到高依次提取到buf数组中
buf[0] = sec%10;
buf[1] = sec/10%10;
buf[2] = sec/100%10;
buf[3] = sec/1000%10;
buf[4] = sec/10000%10;
buf[5] = sec/100000%10;
//从最高为开始,遇到0不显示,遇到非0退出循环
}
}
如果初值要改为999999,代码可以改成如下: while (1)
{
if (flag1s == 1) //判断1秒定时标志
{
flag1s = 0; //1秒定时标志清零
// sec--; //秒计数自减1屏蔽
//将sec按十进制位从低到高依次提取到buf数组中
buf[0] = sec%10;
buf[1] = sec/10%10;
buf[2] = sec/100%10;
buf[3] = sec/1000%10;
buf[4] = sec/10000%10;
buf[5] = sec/100000%10;
sec--; //秒计数自减1这里是先送显示,后面再减一
//从最高为开始,遇到0不显示,遇到非0退出循环
}
}
我想看看你写的程序!可以就发我一下你的代码和你的那个硬件图吧。
然后下面这个程序你可以参考一下。是符合我的硬件图的。
#include <reg51h>
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void show(unsigned char n);
void delay(unsigned int k);
void main()
{
unsigned char i;
int j;
while(1)
{
for(i=60;j=60,i>0;i--)
while(j--)
show(i);
}
}
void show(unsigned char n)
{
P0=table[n%10];
P1=0x01;
delay(10);
P1=0xFF;
P0=table[n/10];
P1=0x02;
delay(10);
P1=0xFF;
}
void delay(unsigned int k)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<k;j++);
}
大体思路!a;先要写好0、1、2、3、4、5、6、7、8、9数字在七段数码管显示的数据表程序
b;写好60每秒减一直到零的程序,然后写要接位程序(30-1)
c:写好将每次数字变化后的数字经过a; 输出到七段数码管显示
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)