51单片机的程序(c语言版),用数码管进行倒计时。

#include<reg51.h>
unsigned char led_table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0,0x10};
sbit led_ten=P3^0;
sbit led_single=P3^1;

main()
{
char count;
unsigned char ten,single;
int displaycount;
count=30;
led_ten=0;
led_single=0;
while(1)
{
while(count>=0)
{
count--;

ten=count/10;
single=count%10;
for(displaycount=20000;displaycount>0;displaycount--)
{
P2=led_table[ten];
led_ten=1;
led_ten=0;
P2=led_table[single];
led_single=1;
led_single=0;
}
}
count=30;
}
}

for(displaycount=20000;displaycount>0;displaycount--)
{
P2=led_table[ten];
led_ten=1;
led_ten=0;
P2=led_table[single];
led_single=1;
led_single=0;
}
这一段表示什么意思?

第1个回答  2013-03-23
你是不是用2了锁存器啊。
P2=led_table[ten];
led_ten=1;//打开锁存器
led_ten=0;//关闭锁存期

存储10位
P2=led_table[single];
led_single=1;//打开锁存器
led_single=0;//关闭锁存器

存储个位
另外led_ten,led_single 你要先定义一下吧追问

模拟一个红绿灯路口的交替通行功能,每个路口通行30秒。
即:红数码管从30秒开始,逐一减到0,红数码管停止显示。蓝色数码管从30秒开始逐一减到0,蓝色数码管停止显示,红色数码管重新开始,并交替轮流
这个我弄不懂让数码管停止显示,display不是显示数据的意思么?我在想怎么让数码管30秒不显示?所以看不懂那段。

追答

错了 刚看到图 不是锁存器,你的那个液晶在Proteus名字是什么?

追问

数码管,7seg

追答

我搭建了一下试试,一直是乱码,因为两个数码管之前转换太快,所以不可能正常显示,建议加2个锁存器,或者用真实的硬件模拟一下,仿真软件在时间控制上真的不怎么好用。
你说的关闭,直接将那2个引脚拉低就好了。
还有就是数组好像不对
共阴0~9
unsigned char led_table[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};

追问

真心谢谢你,我已经知道了。非常感谢

追答

不客气

本回答被提问者采纳
第2个回答  2013-03-23
这个很简单,就是循环扫描两万次,要是扫描的次数少了,你的眼睛是看不到亮的,
led_single=1;//
led_single=0;//
这两句就是控制显示的=1者亮,0者关
显示两万次,
30的减一计数器,每减一就显示两万次,这个两万次也可能就一秒或几秒,看你单片机的时钟频率。追问

哦,明白了,谢谢。不过,我发现扫描的次数少,眼睛仍然看到亮啊,不过数字显示不规则。怎样才能让他不显示啊?

第3个回答  2013-03-23
数码管显示2个数字,共显示2万次。
第4个回答  2013-03-23
Led_ten ,Led_single 你要设置用来控制谁的信号?追问

模拟一个红绿灯路口的交替通行功能,每个路口通行30秒。
即:红数码管从30秒开始,逐一减到0,红数码管停止显示。蓝色数码管从30秒开始逐一减到0,蓝色数码管停止显示,红色数码管重新开始,并交替轮流

这个我弄不懂让数码管停止显示,display不是显示数据的意思么?我在想怎么让数码管30秒不显示?所以看不懂那段。

51单片机试题,写一个用单个数码管显示10秒倒计时的程序,急!!!
include <reg52.h> define uchar unsigned char define uint unsigned int sbit duan=P2^6;sbit wei=P2^7;uchar disp=0;uchar time=10;int miao=0;uchar code dispcode[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; \/\/段...

51单片机 数码管实现九秒倒计时的程序
a=9;while(a>0){ P0=table[a];delayms(1000);a--;}

51单片机编程2位数码管倒计时,从10秒开始每隔一秒减一当减到零有重复...
include<reg51.h> define uchar unsigned char define uint unsigned int uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};\/\/主程序 void main(){ P0=0x06; \/\/显示10 P2=0x3f;i=0;Second_Counts=100;TMOD=0x01; \/\/定时器0方式1 TH0=(65536-50000...

51单片机30秒倒计时,用数码管显示的,c程序,元件只有at89c51和数码管,没...
include<reg52.h> define uint unsigned int define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num,num1;tt;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);vo...

求C51单片机汇编语言控制两位数码管倒计时程序,最好能说明下思路_百度...
MOV R4,#60 ;60S开始倒计时 SETBEA SETBET0 SETB TR0 MOV DPTR,#TABLE MAIN1:ACALLDISP AJMPMAIN1 DISP:MOV A,R4 MOV B,#10 DIV AB ;当前值除以10 MOV 20H,A ;得出的商送给十位 MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示 MOVC A,@A+DPTR ...

基于51单片机的999倒计时C语言程序。
\/ 要求是能进行9999秒倒计时 用C语言实现 \/ include<at89X51.h> define uchar unsigned char define uint unsigned int uchar num_qian,num_bai,num_shi,num_ge;\/\/定义千位,百位,十位,个位。uint time;\/\/要显示的时间0~9999 uint tcnt;\/\/计时单元 \/\/***\/\/ \/\/以下是端口定义 \/\/*...

51单片机接2个led数码管,怎么让数码管倒计时?
先看看下面程序,看懂了,就知道咋编了 include<reg52.h> define uchar unsigned char define uint unsigned int uchar a , b=0;sbit wei1=P1.0;sbit wei2=P1.1;\/\/共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void ...

...程序 “秒表是倒计时,从100秒开始倒计时 用数码管实时显示当前计时值...
假设P0 P2接数码管,静态驱动,程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int uchar num=100;uchar time=0;\/\/共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) \/\/1ms延时...

我想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一...
全局变量2个用于表示个位和十位,显示的时候可以省点力不用每次计算个位十位。然后一个全局变量代表秒 编程的话,首先是按键响应中断,控制某个全局变量flag的值,三种状态:正常、暂停、到时间。按键可以在前两种之间切换,如果已经是第三种状态则没反应(或者要重置什么随你)然后定时器,一直开着就好,...

51单片机数码管倒计时!自己写的程序但输入后怎么都亮!#include<reg52...
首先指出程序中明显的问题:1.数字只能显示1~8,下面修改后显示0~9;当然这个不是问题;2.主要问题:混淆了两位数码管动态显示的时间逻辑;显示的数字变化没有单独设置时间,以至于数字变化和数码管的短时间动态显示混淆了。也就是数码管动态显示是根据人眼视觉效应原理,快速改变点亮第一个和点亮第二个...

相似回答