设计单片机0-99计数器
时间: 2024-01-12 14:02:56 浏览: 50
以下是设计单片机0-99计数器的基本思路:
1. 定义两个变量来保存当前的十位数和个位数,初始值都为0。
2. 设置两个按键作为计数器的加和减按钮,当按下加按钮时,对个位数进行加1操作,当个位数达到9时,个位数清零,同时十位数加1;当按下减按钮时,对个位数进行减1操作,当个位数减到0时,个位数变为9,同时十位数减1。
3. 使用数码管来显示当前的计数器值,将十位数和个位数分别转换成数码管上的两个数码显示出来即可。
以下是一个简单的代码示例,适用于基于8051芯片的单片机:
```
#include <reg51.h> //头文件
sbit button_add = P1^0; //定义加按钮
sbit button_sub = P1^1; //定义减按钮
sbit segA = P2^0; //数码管A段
sbit segB = P2^1; //数码管B段
sbit segC = P2^2; //数码管C段
sbit segD = P2^3; //数码管D段
sbit segE = P2^4; //数码管E段
sbit segF = P2^5; //数码管F段
sbit segG = P2^6; //数码管G段
sbit segDP = P2^7; //数码管小数点
void delay(unsigned int ms) //延时函数
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 120; j++);
}
void display(unsigned char num) //数码管显示函数
{
switch(num)
{
case 0:
segA = segB = segC = segD = segE = segF = 1;
segG = 0;
break;
case 1:
segB = segC = 1;
segA = segD = segE = segF = segG = 0;
break;
case 2:
segA = segB = segG = segE = segD = 1;
segC = segF = 0;
break;
case 3:
segA = segB = segC = segD = segG = 1;
segE = segF = 0;
break;
case 4:
segB = segC = segF = segG = 1;
segA = segD = segE = 0;
break;
case 5:
segA = segC = segD = segF = segG = 1;
segB = segE = 0;
break;
case 6:
segA = segC = segD = segE = segF = segG = 1;
segB = 0;
break;
case 7:
segA = segB = segC = 1;
segD = segE = segF = segG = 0;
break;
case 8:
segA = segB = segC = segD = segE = segF = segG = 1;
break;
case 9:
segA = segB = segC = segD = segF = segG = 1;
segE = 0;
break;
default:
break;
}
}
void main()
{
unsigned char ten = 0; //十位数
unsigned char one = 0; //个位数
while(1) //循环
{
if(button_add == 0) //按下加按钮
{
delay(10); //延时去抖
if(button_add == 0) //再次检测按键状态
{
one++; //个位数加1
if(one == 10) //个位数达到9时
{
one = 0; //个位数清零
ten++; //十位数加1
if(ten == 10) //十位数达到9时
ten = 0; //十位数清零
}
while(button_add == 0); //等待按键释放
}
}
if(button_sub == 0) //按下减按钮
{
delay(10);
if(button_sub == 0)
{
one--; //个位数减1
if(one > 9) //个位数减到0时
{
one = 9; //个位数变为9
ten--; //十位数减1
if(ten > 9) //十位数减到0时
ten = 9; //十位数变为9
}
while(button_sub == 0);
}
}
display(ten); //显示十位数
segDP = 1; //点亮小数点
delay(5); //延时
display(one); //显示个位数
segDP = 0; //关闭小数点
delay(5); //延时
}
}
```
以上代码仅供参考,实际设计中可能需要根据具体的硬件环境进行调整。