用单片机c语言,c51的,使用数码管设计一个60秒倒计时系统,使用两个数码管,要求用定时器中断定时1秒。 仿 20

 我来答
Min52
2012-06-02 · 超过30用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:70.3万
展开全部
//用AT89c52单片机作控制.假如数码管是共阴极的话,定义的段码和位选的锁存器的选通端分别为P2^6,P2^7,P0口接段码端和位码端,而且位码端接的是锁存器输入,输出端的高两位。假设晶振频率为12MHZ。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar miao,t0,flat,shiwei,gewei,;
sbit dula = P2^6;
sbit wela = P2^7;
uchar code table[] =
{ //0-9的编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};
void delay() //延时用于扫描
{
uchar x,y;
for(x = 1;x > 0;x--)
for(y = 100;y > 0;y--);
}
void display() //显示函数
{
uchar w = 0xc0;
uchar i;
for(i = 0;i < 2;i++) //由于数码管只有两位,所以只扫描两次
{
dula = 1; //先选通段锁存器;
P0 = table1[i]; //给段码送数据
dula = 0; //锁存住段码
delay(); //稍微延时一下
wela = 1; //选通位锁存器;
P0 = w;
wela = 0; //下降沿锁存住位码
delay();
w = _cror_(w,1); //位右移动一位
}
}
void init()
{
TMOD = 0x01; //设置定时器0工作方式1
EA = 1; //开总中断
ET0 = 1; //开定时器0中断
TR0 = 1; //开定时器0
TH0 = (65536 - 50000)/256; //给两个寄存器装初值50ms;
TL0 = (65536 - 50000)%256;
}
void main()
{
init();
while(1)
{
if(flat != 1)
{
table1 [0] = table[gewei];
table1[1] = table[shiwei];
display();
}
else
{
table1[0] = table[0];
table1[1] = table[1];
diplay();
}
}
}
void timer0() interrupt 1 // 定时器0
{
TH0 = (65536 - 50000)/256; //重新给两个寄存器装初值;
TL0 = (65536 - 50000)%256;
t0++;
if(t0 == 20) //当定时器到一秒的时候
{
t0 = 0;
miao--;
shiwei = miao / 10; //取出十位数
gewei = miao % 10; //取出个位数
if(miao == 0)
{
TR0 = 0;
shiwei = miao / 10; //取出十位数
gewei = miao % 10; //取出个位数
flat = 1;
}
}

//注意:由于你没有给出数码管的接法等,所以我自己假设的设计一个简单的电路来实现此功能。不一定能在你的实验板上显示出来。
更多追问追答
追问
仿真元件数码管为7SEG-COM-CATHODE。要有个接线图哦。谢了
追答
是共阳极吗?我英文不好。。也很少使用proteus,如果是共阳极就把编码表该一下就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花花雨伞520
2012-06-02
知道答主
回答量:47
采纳率:0%
帮助的人:25.5万
展开全部
两个数码管显示时间吗?仿真使用?
追问
是的..仿真元件数码管为7SEG-COM-CATHODE。要有个接线图哦。谢了
追答
haode
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式