求单片机89C51 的c程序 ---->实现 30秒定时器。

来源:百度知道 编辑:UC知道 时间:2024/09/25 14:35:31
如图,简单的单片机,通过锁存器74HC573控制数码管(这个只需要控制两位)。

使数码管实现30秒定时器功能。(从00跳到30)

我的主要困难是,无法实现两个数码管同时显示不同的数字。
我的主要困难是,无法实现两个数码管同时显示不同的数字。
我的意思是只用P1口控制数字,其他的最好少用,我的电路如图
谢谢 我这就去试试你编的程序

//说多了没用,直接帮你写出这段程序,给你慢慢琢磨
#include<REG51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};0-9的段码(共阴极数码管)

unsigned char code dispbit[]={0xFE,0xFD,0xFB,0xF7,
0xEF,0xDF};1-6位数码管的位码

unsigned char cont;//动态扫描计数器
unsigned char dispbuf[6]={1,2,3,4,5,6};//显示缓冲区,改变里面的数值就改变了显示内容
sbit DULA=P2^6;
sbit WELA=P2^7;

void delay(void)
{
unsigned char i;
for(i=255;i>0;i--);
}

void main(void)
{
DULA=0;
WELA=0;
while(1)
{
P0=0XFF;//清显示
WELA=1;
WELA=0;

P0=dispcode[dispbuf[cont]];//取段码到端口
DULA=1;//送到数码管段引脚
DULA=0;

P0=dispbit[cont];//取位码到端口
WELA=1;//送到数码管位引脚
WELA=0;//此时某个数码管被点亮,

if(++cont>=6)cont=0;//循环6次为一个动态扫描周期
delay();//延时保持显示
}
}