单片机弄一个计时器使周期为50ms的方波使计时器在0~59秒范围内循环计时,且每次增加一秒。当复位键有效时,该计时器清零时不再计时。当复位键无效的前提下,当使能键有效时该计时器开始计时,当使能键无效时该计时器暂停计时。该计时器使用两位数码管动态显示计时值的仿真电路图怎么画
时间: 2023-05-19 07:06:24 浏览: 88
首先,我们需要使用一个单片机来实现这个计时器。我们可以选择常用的8051单片机,然后编写相应的程序来实现计时器的功能。
以下是一个简单的程序示例:
```
#include <reg51.h>
sbit enable = P1^0; // 使能键
sbit reset = P1^1; // 复位键
sbit out = P1^2; // 输出方波的引脚
unsigned char count = 0; // 计时器计数值
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 125; j++);
}
void main()
{
while(1)
{
if(reset == 0) // 复位键有效
{
count = 0; // 计时器清零
out = 0; // 方波输出低电平
}
else // 复位键无效
{
if(enable == 1) // 使能键有效
{
delay(50); // 延时50ms
count++; // 计时器加1
if(count >= 60) count = 0; // 计时器归零
out = ~out; // 方波输出取反
}
}
}
}
```
接下来,我们需要使用两位数码管来显示计时器的计数值。我们可以使用74HC595芯片来实现动态显示。
以下是电路图示例:
![电路图](https://img-blog.csdn.net/20180411150407392)
在这个电路中,我们使用了两个74HC595芯片来控制两位数码管的显示。我们将单片机的P2口连接到74HC595芯片的串行数据输入(SDI)引脚,将P3口连接到74HC595芯片的时钟输入(SCK)引脚,将P0口连接到74HC595芯片的输出使能(EN)引脚,将74HC595芯片的Q0和Q1引脚连接到数码管的段选引脚,将74HC595芯片的Q2和Q3引脚连接到数码管的位选引脚。
最后,我们需要编写相应的程序来控制74HC595芯片的输出,以实现动态显示。
以下是一个简单的程序示例:
```
#include <reg51.h>
sbit latch = P0^0; // 输出使能引脚
unsigned char code table[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 125; j++);
}
void shift(unsigned char data) // 数据移位函数
{
unsigned char i;
for(i = 0; i < 8; i++)
{
P2 = (data & 0x80) >> 7; // 取最高位
data <<= 1; // 左移一位
P3 = 0; // 时钟输入置低
P3 = 1; // 时钟输入置高
}
}
void display(unsigned char num) // 数码管显示函数
{
unsigned char high, low;
high = num / 10; // 取十位数
low = num % 10; // 取个位数
shift(table[low]); // 移位显示个位数
shift(table[high]); // 移位显示十位数
latch = 1; // 输出使能置高
latch = 0; // 输出使能置低
}
void main()
{
while(1)
{
display(count); // 显示计数值
delay(1); // 延时1ms
}
}
```
这个程序使用了一个显示表来将数字转换为数码管的段选码。在每个循环中,程序将计数值分解为十位数和个位数,并使用shift函数将对应的段选码移位输出到74HC595芯片中。最后,程序将输出使能引脚置高,以实现动态显示。
希望这个回答能够帮助你!
阅读全文