用单片机P0端口控制LED数码管,并使用定时器实现 99秒倒计时显示。

用52单片机,C语言编程... 用52单片机,C语言编程 展开
 我来答
hgddgff
2013-12-29 · TA获得超过165个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:125万
展开全部
你用什么控制位选,我这有138控制的
/********************************
用LS138控制两位数码管显示99~0,
利用定时器0延时1分钟

*********************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
uint num,i,led[2],numt0,temp,numdis;
void display(uchar numdis)//显示程序
{
/* temp++;
if(temp==480)//调整此数值改变数码显示速度
{
temp=0;//延时计数 每扫描一次加一次
--numdis;//每隔10个扫描周期加一次
}
led[0]=table[numdis%100/10];//十位
led[1]=table[numdis%10];//个位
for(i=0;i<2;i++)//实现2位动态扫描循环
{
P0=led[i];//将字模送到P0口显示

switch(i)//使用switch语句控制位选
{
case 0:LS138A=0;LS138B=0;LS138C=0; break;
case 1:LS138A=1;LS138B=0;LS138C=0; break;
}
delay(1);//此处控制动态显示,太长会有闪烁感
}*/
P0=table[numdis%100/10];
LS138A=0;LS138B=0;LS138C=0;
delay(1);

P0=table[numdis%10];
LS138A=1;LS138B=0;LS138C=0;
delay(1);

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x01;//设置定时器0为工作方式1(M1M0为01)
TH0=(65536-45872)/256;//装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void main()
{
init();
num=99;//装入初始值99,数码管显示为99
while(1)
{
display(num);
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;//重装初值
TL0=(65536-45872)%256;
numt0++;//numt0每加1次判断一次是否到20次
if(numt0==20)//如果到了20次,说明1秒时间到
{
numt0=0;//然后把numt0清0重新再计20次
num--;
if(num==0)//如果num减到0,重回初始值
num=99;
}
}

望采纳!
135******20
2013-12-29
知道答主
回答量:14
采纳率:0%
帮助的人:15.3万
展开全部
我会汇编
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式