資源簡介
設計16鍵盤簡易計算器,實現以下功能。
1、4*4鍵盤輸入,用按鍵輸入數和運算符號。
1 2 3 +
4 5 6 -
7 8 9 *
C 0 = ∕
2、數碼管顯示運算過程和結果(十進制數),負號用一個LED燈顯示。
3、具有清零和復位功能。
4、具有連續運算功能。
5、具有簡易報錯和提示功能。

代碼片段和文件信息
/******************************************************
*
*項目名稱:簡易計算器
*
*函????數:cal.c
*
*作????用:按鍵處理,主函數
*
*有待改進:本程序還可以進一步的完善,其一就有如按下1+2,
* ???再按下+號的時候,就直接計算出結果并顯示。
* ???希望有興趣的朋友能夠加以改進。
*
*制?作?人:沐雨青林
*
*******************************************************/
#include?“led_8.h“
#define uchar unsigned char
#define usint unsigned? short?int
#define uint unsigned? int
extern?void?Led8_disp(int?num);
extern?const?uchar?key_source_code[];
extern?void?init_key(void);
#define key_add ‘+‘
#define key_de ‘-‘
#define key_mul ‘*‘
#define key_mol ‘/‘
#define key_canal ‘C‘
#define key_means ‘=‘
const?uchar?key_code[]?={?1?2?3?key_add //?+
??4?5?6?key_de //?-
??7?8?9?key_mul //?*
??key_canal?0x00?key_means?key_mol};//?/
int firstnum=0;//存放第1個數
int secondnum=0;//存放第2個數
uchar operation=‘\0‘;//運算符號
uchar mean_sign=0;//等號標志位 1為開,0位關
uint optimes=0;//運算符號計數位
//以運算符+、-、*、/為標志,當這些標志出現后,則輸入的數字存放到
//secondnum中
//變量初始化
void?init_clear(void)
{
firstnum?=?0;
secondnum?=?0;
operation?=?‘\0‘;
optimes?=?0;
LED_CS4?=?0xff;
Led8_disp(0);
return;
}
//計算多位數,num為新輸入的一位數
//算好的多位數存放在snumsnum為原來存放有數的變量
int?duoweishu(int?snum?int?num)
{
snum?=?num?+?snum*10;
return?snum;
}
//直入式鍵盤處理
void?op_disdir(usint?key_d)
{
uint?i;
for(i=0;?i<4;?i++)
{
if(key_d?==?key_source_code[i])
{
if(i?==?3)//?‘+’?按鍵處理
{
LED_CS4?=?0x7f;
optimes++;
operation?=?key_code[i];//operation?為‘+’
}
else
{
//在沒有按下運算符的時候,把按鍵對應的鍵值存到firstnum
if(operation?==?‘\0‘)
{
firstnum?=?duoweishu(firstnumkey_code[i]);
Led8_disp(firstnum);
}
else//按下運算符的時候,把按鍵對應的鍵值存到secondnum
{
if(mean_sign?==?1)//等號標志位
{
secondnum?=?0;
mean_sign?=?0;//清等號標志位
}
if(operation?==?‘-‘?&&?optimes?==?1)//負數輸入
{
firstnum?=?duoweishu(firstnum-key_code[i]);
Led8_disp(firstnum);
}
else
{
secondnum?=?duoweishu(secondnum?key_code[i]);
Led8_disp(secondnum);
}
}
}
}
}
}
//矩陣鍵盤處理
void?op_dismatrix(usint?key_d)
{
uint?i;
for(i=4;?i<16;?i++)
{
if(key_d?==?key_source_code[i])
{
if(i?==?7) //?‘-’?鍵處理
{
LED_CS4?=?0xbf;
if(operation?==?‘\0‘?&&?firstnum?==?0)
optimes?=?1;
else
optimes?+=?2;
operation?=?key_code[i];
}
else?if(i?==?11) //?‘*’?鍵處理
{
LED_CS4?=?0xdf;
optimes++;
operation?=?key_code[i];
}
else?if(i?==?12) //?‘C’?鍵處理
{
init_clear();//變量初始化
break;
}
else?if(i?==?14) //?‘=’?鍵處理
{
mean_sign=1;//等號標志位
if(operation?==?‘+‘)
firstnum?=?firstnum?+?secondnum;
else?if(operation?==?‘-‘)
firstnum?=?firstnum?-?secondnum;
else?if(operation?==?‘*‘)
firstnum?=?firstnum?*?secondnum;
else?if(operation?==?‘/‘)
{
if(secondnum?==?0)//被除數為0,結果為無窮大
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3203??2010-06-17?20:04??程序\boot.s
?????文件???????4383??2010-06-23?19:39??程序\cal.c
?????文件?????199862??2010-06-23?20:50??程序\cal_key\cal_key.mcp
?????文件???????3450??2010-06-23?20:50??程序\cal_key\cal_key_Data\CWSettingsWindows.stg
?????文件??????55100??2010-06-23?20:50??程序\cal_key\cal_key_Data\Debug\TargetDataWindows.tdt
?????文件??????24972??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\cal_key.axf
?????文件???????6032??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\cal_key.bin
?????文件???????2424??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\ob
?????文件??????10192??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\ob
?????文件???????7688??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\ob
?????文件???????6688??2010-06-23?19:42??程序\cal_key\cal_key_Data\DebugRel\ob
?????文件??????59664??2010-06-23?20:50??程序\cal_key\cal_key_Data\DebugRel\TargetDataWindows.tdt
?????文件??????53714??2010-06-23?20:50??程序\cal_key\cal_key_Data\Release\TargetDataWindows.tdt
?????文件???????3932??2010-06-23?19:41??程序\key.c
?????文件???????1559??2010-06-23?19:39??程序\led_8.c
?????文件????????600??2010-06-23?19:42??程序\led_8.h
?????文件??????71333??2010-06-23?10:53??1.1.JPG
?????文件??????63152??2010-06-23?12:30??2.1.JPG
?????文件?????105625??2010-06-23?12:35??2.2.JPG
?????文件?????653824??2010-06-24?18:35??實訓報告.doc
?????目錄??????????0??2010-06-23?19:26??程序\cal_key\cal_key_Data\DebugRel\ob
?????目錄??????????0??2010-06-23?20:50??程序\cal_key\cal_key_Data\Debug
?????目錄??????????0??2010-06-23?20:50??程序\cal_key\cal_key_Data\DebugRel
?????目錄??????????0??2010-06-23?20:50??程序\cal_key\cal_key_Data\Release
?????目錄??????????0??2010-06-23?19:26??程序\cal_key\cal_key_Data
?????目錄??????????0??2010-06-23?20:50??程序\cal_key
?????目錄??????????0??2010-06-23?20:50??程序
-----------?---------??----------?-----??----
??????????????1337397????????????????????27
............此處省略0個文件信息
評論
共有 條評論