標題:
STC89單片機簡單版超級計算器程序
[打印本頁]
作者:
天藍色的Toto
時間:
2020-11-16 20:44
標題:
STC89單片機簡單版超級計算器程序
自己寫了個簡單版的超級計算器程序,只能實現(xiàn)最多五位整數(shù)的加減乘除,而且不可以用于負數(shù)的運算,僅僅用于參考。
制作出來的實物圖如下:
51hei圖片_20201116204301.jpg
(93.66 KB, 下載次數(shù): 36)
下載附件
2020-11-16 20:44 上傳
單片機源程序如下:
#include<reg52.h>
#include "matrixkey.h"
#include "tm1638.h"
/*制作一個簡易計算器。 要求: a. 實現(xiàn)兩個數(shù)字的 100 以內(nèi)加減乘除,結(jié)果只保留整數(shù)即可;
b. 先輸入一個數(shù)字,下運算符按鍵時,數(shù)碼管清零,然后輸入下一個 數(shù)字,按下等于號按鍵后,顯示運算結(jié)果。
并且,中間若出現(xiàn)輸入錯 誤,可以利用刪除按鍵,進行一位一位地刪除更改。*/
#define u8 unsigned char
#define u16 unsigned int
u8 code distab[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
u8 DYGSS[8];//第一個數(shù)
u8 DEGSS[8];//第二個數(shù)
u16 dygs;//第一個數(shù)
u16 degs;//第二個數(shù)
u16 result;//結(jié)果
u8 state; //state分為1 2 3
u8 jisuan;//jisuan分為 1 2 3 4 加減乘除
u8 weishu1=0;//第一個數(shù)的位數(shù)
u8 weishu2=0;//第二個數(shù)的位數(shù)
u8 hym;//hym為按鍵件嗎
void Init_Tab();
void Input_dygs();//輸入第一個數(shù)
void Input_degs();//輸入第二個數(shù)DYGS
void Tuige(u8 len,u8 *P);
void Endline();//顯示結(jié)果
void Display(u8 len,u8 *P);//顯示中途
u16 Calculate();//計算
void CLRTAB();
void Init_Tab();
void main()
{
// u8 i;//萬能變量
init_TM1638();
while(1)
{
Init_Tab();
Input_dygs();
Input_degs();
Endline();
}
}
void Input_dygs()//輸入第一個數(shù)
{
while(state==1)
{
hym=Keyscan();
if(hym!=88)
{
if(hym<=9)
{
weishu1++;
DYGSS[weishu1]=DYGSS[weishu1-1];
DYGSS[weishu1-1]=hym;
}
if(hym==10)
{
weishu1--;
CLRTAB();
}
switch(hym)
{
case 12:jisuan=1;state=2;break;
case 13:jisuan=2;state=2;break;
case 14:jisuan=3;state=2;break;
case 15:jisuan=4;state=2;break;
default:break;
}
}
Display(weishu1,DYGSS);
}
CLRTAB();
}
void Input_degs()//輸入第二個數(shù)DYGS
{
while(state==2)
{
hym=Keyscan();
if(hym!=88)
{
if(hym<=9)
{
weishu2++;
DEGSS[weishu2]=DEGSS[weishu2-1];
DEGSS[weishu2-1]=hym;
}
if(hym==10)
{
weishu2--;
CLRTAB();
}
if(hym==11)
{
state=3;
result=Calculate();
}
}
Display(weishu2,DEGSS);
}
CLRTAB();
}
void Tuige(u8 len,u8 *P)
{
len--;
P[len]=0;
}
void Endline()//顯示結(jié)果
{
while(state==3)
{
hym=Keyscan();
if(hym==10)
{
state=1;
}
Write_DATA(3*2,distab[result/10000]);
Write_DATA(4*2,distab[result%10000/1000]);
Write_DATA(5*2,distab[result%1000/100]);
Write_DATA(6*2,distab[result%100/10]);
Write_DATA(7*2,distab[result%10]);
}
CLRTAB();
}
void Display(u8 len,u8 *P)//顯示中途
{
u8 i;
for(i=0;i<len;i++)
{
Write_DATA((7-i)*2,distab[P[len-1-i]]);
}
}
u16 Calculate()//計算
{
u8 i;
u16 hymm;
for(i=0;i<weishu1;i++)
{
dygs+=DYGSS[i];
dygs*=10;
}
for(i=0;i<weishu2;i++)
{
degs+=DEGSS[i];
degs*=10;
}
dygs/=10;
degs/=10;
switch(jisuan)
{
case 1:hymm=dygs+degs;break;
case 2:hymm=dygs-degs;break;
case 3:hymm=dygs*degs;break;
case 4:hymm=dygs/degs;break;
}
return hymm;
}
void CLRTAB()
{
u8 ii;
for(ii=0;ii<8;ii++)
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有程序51hei提供下載:
簡單版計算器.zip
(44.35 KB, 下載次數(shù): 29)
2020-11-16 20:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1