51单片机静态数码管计算器实例
时间: 2023-08-21 09:32:57 浏览: 155
51单片机数码管例程
好的,下面为您提供一个51单片机静态数码管计算器的实例代码:
```
#include<reg52.h>
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管显示0~9,A~F
uchar num1,num2,result;//记录输入的数值和结果
uchar flag=0;//标志位,用于选择运算符
void delay(uchar z)//延时函数
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar num)//数码管显示函数
{
P0 = table[num];
}
void keyscan()//按键扫描函数
{
uchar keyvalue = P1;
keyvalue &= 0x0f;
if(keyvalue != 0x0f)
{
delay(10);
keyvalue = P1;
keyvalue &= 0x0f;
if(keyvalue != 0x0f)
{
switch(keyvalue)
{
case 0x0e: num1=1; display(num1); break;//1键
case 0x0d: num1=2; display(num1); break;//2键
case 0x0b: num1=3; display(num1); break;//3键
case 0x07: num1=4; display(num1); break;//4键
case 0x0e: num1=5; display(num1); break;//5键
case 0x0d: num1=6; display(num1); break;//6键
case 0x0b: num1=7; display(num1); break;//7键
case 0x07: num1=8; display(num1); break;//8键
case 0x0e: num1=9; display(num1); break;//9键
case 0x0d: num1=0; display(num1); break;//0键
case 0x0b: flag=1; break;//加法键
case 0x07: flag=2; break;//减法键
case 0x0e: flag=3; break;//乘法键
case 0x0d: flag=4; break;//除法键
case 0x0b: flag=5; break;//等于键
case 0x07: num1=0; num2=0; result=0; display(num1); break;//清零键
}
}
}
}
void main()
{
while(1)
{
keyscan();
if(flag != 0)
{
keyscan();
num2 = num1;
num1 = 0;
display(num1);
switch(flag)
{
case 1: result = num1 + num2; break;//加法运算
case 2: result = num1 - num2; break;//减法运算
case 3: result = num1 * num2; break;//乘法运算
case 4: result = num1 / num2; break;//除法运算
}
display(result);
flag = 0;
}
}
}
```
这是一个简单的静态数码管计算器,通过按键输入数字和运算符,然后在数码管上显示结果。代码中使用了延时函数、数码管显示函数和按键扫描函数等。需要注意的是,这个程序中只能进行加减乘除四则运算,如果需要扩展其他运算,可以自行添加代码。
阅读全文