1.實(shí)現(xiàn)功能:
實(shí)現(xiàn)單字節(jié)加減乘除四則運(yùn)算
1、能通過鍵盤輸入正確鍵值
2、能進(jìn)行簡單的四則運(yùn)算
3、能以數(shù)碼管正確顯示數(shù)值
4、能重復(fù)操作
2.元器件清單
文章來源:http://www.zghlxwxcb.cn/news/detail-512541.html
3.軟件流程圖
4.仿真圖
如22+96文章來源地址http://www.zghlxwxcb.cn/news/detail-512541.html
6.相關(guān)代碼
#include "reg51.h"
sbit smg1=P2^0;//數(shù)碼管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit smg5=P2^4;
sbit smg6=P2^5;
sbit smg7=P2^6;
sbit smg8=P2^7;
unsigned int a=0,b=0; //輸入
unsigned char fuhao=0;//符號
unsigned int c=0;//結(jié)果
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9,無小數(shù)點(diǎn)
unsigned char disp[]={0,0,0,0,0,0,0,0};
void delay(unsigned int i)//延時(shí)
{
while(i--);
}
unsigned char key_scan()//按鍵檢測
{
unsigned char i,j;
i=0;
j=0;
P1=0x0f;
if(P1!=0x0f) //檢測有無按下
{
switch(P1)//檢測行
{
case 0x0e:i=3;break;
case 0x0d:i=2;break;
case 0x0b:i=1;break;
case 0x07:i=0;
}
P1=0xf0;
switch(P1)//檢測列
{
case 0xe0:j=13;break;
case 0xd0:j=9;break;
case 0xb0:j=5;break;
case 0x70:j=1;
}
while(P1!=0xf0);//等待按鍵松開
}
return i+j;
}
void main()//主函數(shù)
{
unsigned char i;
unsigned int m=0;
while(1)
{
//顯示
if(fuhao<5)
{
P0=smgduan[a%1000/100];smg1=0;delay(100);smg1=1;
P0=smgduan[a%100/10];smg2=0;delay(100);smg2=1;
P0=smgduan[a%10];smg3=0;delay(100);smg3=1;
switch(fuhao)//符號
{
case 1:P0=0x01;break;
case 2:P0=0x40;break;
case 3:P0=0x08;break;
case 4:P0=0x80;break;
default:P0=0;
}
smg4=0;delay(100);smg4=1;
P0=smgduan[b%1000/100];smg5=0;delay(100);smg5=1;
P0=smgduan[b%100/10];smg6=0;delay(100);smg6=1;
P0=smgduan[b%10];smg7=0;delay(100);smg7=1;
}
else//顯示結(jié)果
{
P0=smgduan[c%1000/100];smg5=0;delay(100);smg5=1;
P0=smgduan[c%100/10];smg6=0;delay(100);smg6=1;
P0=smgduan[c%10];smg7=0;delay(100);smg7=1;
}
//==================================================
i=key_scan();//檢測
if((i>0)&&(i<11))//輸入數(shù)值
{
if(fuhao==0)//第1個(gè)輸入
{
a=a*10+i-1;
if(a>999)
a=a%1000;
}
else //第2個(gè)輸入
{
b=b*10+i-1;
if(b>999)
b=b%1000;
}
}
if(i==13)//+
{
fuhao=1;
}
if(i==14)//-
{
fuhao=2;
}
if(i==15)//*
{
fuhao=3;
}
if(i==16)// /
{
fuhao=4;
}
if(i==11)//ok
{
switch(fuhao)
{
case 1:c=a+b;break;
case 2:c=a-b;break;
case 3:c=a;c=c*b;break;
case 4:c=a/b;
}
fuhao=5;
}
if(i==12)//清除
{
a=0;
b=0;
c=0;
fuhao=0;
}
}
}
到了這里,關(guān)于單片機(jī)51實(shí)現(xiàn)計(jì)算器詳細(xì)代碼能自己運(yùn)行的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!