AT89C51单片机使用8个8段数码管显示0000000.0-0000099.9要加按钮开始复位停止
时间: 2023-12-28 10:06:25 浏览: 102
以下是使用C语言编写的AT89C51单片机控制8个8段数码管显示0000000.0-0000099.9并加入按钮开始、复位和停止功能的代码,假设使用的是共阳数码管:
```c
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // 数码管0到9的编码值
bit flag; // 标志位,用于控制开始和停止
uint num; // 数码管显示的数字
void delay(uint xms) // 延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display() // 数码管显示函数
{
uchar i,temp;
uint a,b;
a = num / 10;
b = num % 10;
temp = table[b];
for(i=0;i<8;i++) // 显示个位数码管
{
P2 = 0x01 << i; // 选中对应的数码管
P0 = temp; // 显示数字
delay(3); // 延时一段时间
P0 = 0x00; // 关闭数码管
}
temp = table[a];
for(i=0;i<8;i++) // 显示十位数码管
{
P2 = 0x01 << i; // 选中对应的数码管
P0 = temp; // 显示数字
delay(3); // 延时一段时间
P0 = 0x00; // 关闭数码管
}
}
void main()
{
uchar key;
flag = 0; // 初始标志位为0,即停止状态
num = 0; // 初始数字为0
while(1)
{
key = P1; // 读取按键状态
if(key == 0xFE) // 按下开始按钮
{
flag = 1; // 标志位置1,进入开始状态
}
if(key == 0xFD) // 按下复位按钮
{
flag = 0; // 标志位清零,停止计数
num = 0; // 数码管显示的数字清零
}
if(flag == 1) // 标志位为1,进入开始状态
{
display(); // 数码管显示函数
num++; // 数码管显示的数字加1
if(num >= 100) // 数字大于等于100,停止计数
{
flag = 0; // 标志位清零,停止计数
num = 0; // 数码管显示的数字清零
}
}
}
}
```
在这段代码中,我们使用了8个8段数码管,并通过按键控制开始、复位和停止计数。在使用时,需要根据具体的单片机型号和数码管类型进行相应的修改。注意,这里使用的是AT89C51单片机,如果您使用的是其他型号单片机,需要进行相应的修改。
阅读全文