我在proteus中做一个60的倒计时。个人觉得应该是延时不对。请大虾帮忙看看。。
#include<reg52.h>unsignedchartable2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0...
#include<reg52.h>
unsigned char table2[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
unsigned int num=0, i=0, j=0, k=0;
unsigned int shu=59, shiwei, gewei, shuzi;
sbit wei1=P3^0;
sbit wei2=P3^1;
/*延时函数*/
void delay(unsigned int num)
{
for(i=0;i<num;i++)
{
for(j=0;j<1000;j++)
;
}
}
/*取位,个位十位*/
void quwei(unsigned int shuzi)
{
shiwei = shuzi/10;
gewei = shuzi%10;
}
/*主函数*/
void main(void)
{
while(1)
{
quwei(shu);
wei1=1;
P2=table2[gewei];
wei1=0;
delay(1);
wei2=1;
P2=table2[shiwei];
wei2=0;
delay(1);
shu--;
delay(50);
}
}
开始的时候显示55,然后个位闪烁。一段时间后两位都变成44. 展开
unsigned char table2[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f};
unsigned int num=0, i=0, j=0, k=0;
unsigned int shu=59, shiwei, gewei, shuzi;
sbit wei1=P3^0;
sbit wei2=P3^1;
/*延时函数*/
void delay(unsigned int num)
{
for(i=0;i<num;i++)
{
for(j=0;j<1000;j++)
;
}
}
/*取位,个位十位*/
void quwei(unsigned int shuzi)
{
shiwei = shuzi/10;
gewei = shuzi%10;
}
/*主函数*/
void main(void)
{
while(1)
{
quwei(shu);
wei1=1;
P2=table2[gewei];
wei1=0;
delay(1);
wei2=1;
P2=table2[shiwei];
wei2=0;
delay(1);
shu--;
delay(50);
}
}
开始的时候显示55,然后个位闪烁。一段时间后两位都变成44. 展开
3个回答
展开全部
这个程序不是这么写的
1 延时函数
2 主函数
3 显示函数
4 取位函数
然后在显示函数里面只要调用先是函数就可以了
void main(void)
{
while(1)
{
xianshi();
}
}
void xianshi ()
{
P1=0X00
P2=table2[gewei];
delay(50);
P1=0X01
P2=table2[shiwei];
delay(50);
}
你要是倒计时的精确的要求比较高的话 还要用到定时器/计时器 延时是很不稳定的
上网下载一个程序 很多的 刚才我写的也不对 有点忙 不好意思啊 不过各个模块就是那个样子的 加油兄弟
1 延时函数
2 主函数
3 显示函数
4 取位函数
然后在显示函数里面只要调用先是函数就可以了
void main(void)
{
while(1)
{
xianshi();
}
}
void xianshi ()
{
P1=0X00
P2=table2[gewei];
delay(50);
P1=0X01
P2=table2[shiwei];
delay(50);
}
你要是倒计时的精确的要求比较高的话 还要用到定时器/计时器 延时是很不稳定的
上网下载一个程序 很多的 刚才我写的也不对 有点忙 不好意思啊 不过各个模块就是那个样子的 加油兄弟
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询