国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機(jī)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(100行)附源碼

這篇具有很好參考價(jià)值的文章主要介紹了51單片機(jī)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(100行)附源碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?不引流,項(xiàng)目最后附上本項(xiàng)目百行源碼??!

如果對(duì)你有幫助不妨點(diǎn)個(gè)贊!

本項(xiàng)目使用:51單片機(jī),矩陣鍵盤,四位數(shù)碼管

使用LCD顯示的思路相差不大,由于是仿真,包容性比較強(qiáng),所以還有很大優(yōu)化空間

先上仿真圖!

51單片機(jī)計(jì)算器程序代碼,單片機(jī),51單片機(jī),單片機(jī),c語言

先上代碼,看不太明白的接著往下看

#include <REGX52.H>		//程序核心:始終顯示num,操作改變num
void display(int num1);			//顯示函數(shù)
void DelayXms(unsigned int x);	//延時(shí)函數(shù)
void keyScan();					//按鍵掃描
void keyAdd();					//數(shù)字多位輸入
void pd();						//判斷
int n1, n2, n3, n4, numKey=10000, num=0, num0=0;//顯示的個(gè)十百千位  鍵值,顯示值,存儲(chǔ)值1
char fuhao='0',fuhao0='0';		//鍵入的符號(hào)值,存儲(chǔ)的符號(hào)值
unsigned char duan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main(){
	while(1){
		keyScan();				//掃描鍵值
		pd();					//判斷鍵值情況
		display(num);			//顯示函數(shù)
	}
}
void keyAdd(){              //實(shí)現(xiàn)鍵入多位數(shù)的效果
	if(numKey<10000){
		num=num*10+numKey;
		numKey=10000;
	}
}
void pd(){
	keyAdd();				//判斷為數(shù)字,則為數(shù)字輸入
	if(fuhao=='c'){			//清零
		num=0;
		num0=0;
		fuhao0='0';
		fuhao='0';
	}
	if(fuhao=='+'){			//加法
		fuhao0='+';			//將符號(hào)'+'存到變量fuhao0
		fuhao='0';			//符號(hào)清零
		num0=num;			//將加數(shù)0存到變量num0
		num=0;
	}
	if(fuhao=='-'){			//減法		
		fuhao0='-';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='*'){			//乘法		
		fuhao0='*';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='/'){			//除法
		fuhao0='/';
		fuhao='0';
		num0=num;
		num=0;
	}
	if(fuhao=='='){			//檢測(cè)到符號(hào)為等號(hào),則進(jìn)行運(yùn)算
		if(fuhao0=='+')num=num0+num;
		else if(fuhao0=='-')num=num0-num;
		else if(fuhao0=='*')num=num0*num;
		else if(fuhao0=='/')num=num0/num;
		fuhao='0';
		num0=0;
	}
}
void keyScan(){
	P3=0xef;//1110 1111
	if(!P3_3){numKey=7;while(!P3_3);}if(!P3_2){numKey=8;while(!P3_2);}if(!P3_1){numKey=9;while(!P3_1);}if(!P3_0){fuhao='+';while(!P3_0);}
	P3=0xdf;
	if(!P3_3){numKey=4;while(!P3_3);}if(!P3_2){numKey=5;while(!P3_2);}if(!P3_1){numKey=6;while(!P3_1);}if(!P3_0){fuhao='-';while(!P3_0);}
	P3=0xbf;
	if(!P3_3){numKey=1;while(!P3_3);}if(!P3_2){numKey=2;while(!P3_2);}if(!P3_1){numKey=3;while(!P3_1);}if(!P3_0){fuhao='*';while(!P3_0);}
	P3=0x7f;
	if(!P3_3){fuhao='c';while(!P3_3);}if(!P3_2){numKey=0;while(!P3_2);}if(!P3_1){fuhao='=';while(!P3_1);}if(!P3_0){fuhao='/';while(!P3_0);}
}
void display(int num1){        //數(shù)碼管動(dòng)態(tài)顯示
	n4=num1%10;
	n3=num1/10%10;
	n2=num1/100%10;
	n1=num1/1000%10;
	P2=0x01;
	P0=duan[n1];
	DelayXms(4);
	P2=0x02;
	P0=duan[n2];
	DelayXms(4);
	P2=0x04;
	P0=duan[n3];
	DelayXms(4);
	P2=0x08;
	P0=duan[n4];
	DelayXms(4);
}
void DelayXms(unsigned int x)		//@12.000MHz
{	unsigned char i, j;
	while(x--)
	{	i = 2;
		j = 239;
		do{while (--j);
		}while (--i);
	}
}

????????實(shí)際上有一定編程基礎(chǔ)的同學(xué)借助代碼里的注釋應(yīng)該都能看明白,單片機(jī)程序要考慮很多問題,例如數(shù)碼管的顯示需要調(diào)動(dòng)cpu資源,所以在程序的設(shè)計(jì)上就不能面向過程,而是采用如上面代碼所示對(duì)各種情況做判斷。判斷鍵值,改變不同的參數(shù),通過各種處理函數(shù)達(dá)到計(jì)算器的目的。

????????我個(gè)人比較菜,喜歡使用全局變量,個(gè)人感覺比較直觀,喜歡用指針的大神輕噴。

? ? ? ? 技術(shù)能力有限,歡迎各位在評(píng)論區(qū)交流指正,使用以下GitHub鏈接可以直接下載。歡迎大家點(diǎn)贊支持。GitHub - biexuhao/51-jisuanqi: 比較簡(jiǎn)短的一種實(shí)現(xiàn)加減乘除計(jì)算功能的計(jì)算器,基于51單片機(jī),使用數(shù)碼管顯示

為了方便觀看,下面將各個(gè)功能分開列出來:

頭文件引入,函數(shù)聲明,定義變量

#include <REGX52.H>		//程序核心:始終顯示num,操作改變num
void display(int num1);			//顯示函數(shù)
void DelayXms(unsigned int x);	//延時(shí)函數(shù)
void keyScan();					//按鍵掃描
void keyAdd();					//數(shù)字多位輸入
void pd();						//判斷
int n1, n2, n3, n4, numKey=10000, num=0, num0=0;//顯示的個(gè)十百千位  鍵值,顯示值,存儲(chǔ)值1
char fuhao='0',fuhao0='0';		//鍵入的符號(hào)值,存儲(chǔ)的符號(hào)值
unsigned char duan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

主函數(shù)

void main(){
	while(1){
		keyScan();				//掃描鍵值
		pd();					//判斷鍵值情況
		display(num);			//顯示函數(shù)
	}
}

多位數(shù)字的鍵入實(shí)現(xiàn)函數(shù)

void keyAdd(){
	if(numKey<10000){
		num=num*10+numKey;
		numKey=10000;
	}
}

鍵值判斷函數(shù)

void pd(){
	keyAdd();				//判斷為數(shù)字,則為數(shù)字輸入
	if(fuhao=='c'){			//清零
		num=0;
		num0=0;
		fuhao0='0';
		fuhao='0';
	}
	if(fuhao=='+'){			//加法
		fuhao0='+';			//將符號(hào)'+'存到變量fuhao0
		fuhao='0';			//符號(hào)清零
		num0=num;			//將加數(shù)0存到變量num0
		num=0;
	}
	if(fuhao=='-'){			//減法		
		fuhao0='-';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='*'){			//乘法		
		fuhao0='*';
		fuhao='0';
		num0=num;
		num=0;
	}	
	if(fuhao=='/'){			//除法
		fuhao0='/';
		fuhao='0';
		num0=num;
		num=0;
	}
	if(fuhao=='='){			//檢測(cè)到符號(hào)為等號(hào),則進(jìn)行運(yùn)算
		if(fuhao0=='+')num=num0+num;
		else if(fuhao0=='-')num=num0-num;
		else if(fuhao0=='*')num=num0*num;
		else if(fuhao0=='/')num=num0/num;
		fuhao='0';
		num0=0;
	}
}

矩陣鍵盤掃描函數(shù)

void keyScan(){
	P3=0xef;//1110 1111
	if(!P3_3){numKey=7;while(!P3_3);}if(!P3_2){numKey=8;while(!P3_2);}if(!P3_1){numKey=9;while(!P3_1);}if(!P3_0){fuhao='+';while(!P3_0);}
	P3=0xdf;
	if(!P3_3){numKey=4;while(!P3_3);}if(!P3_2){numKey=5;while(!P3_2);}if(!P3_1){numKey=6;while(!P3_1);}if(!P3_0){fuhao='-';while(!P3_0);}
	P3=0xbf;
	if(!P3_3){numKey=1;while(!P3_3);}if(!P3_2){numKey=2;while(!P3_2);}if(!P3_1){numKey=3;while(!P3_1);}if(!P3_0){fuhao='*';while(!P3_0);}
	P3=0x7f;
	if(!P3_3){fuhao='c';while(!P3_3);}if(!P3_2){numKey=0;while(!P3_2);}if(!P3_1){fuhao='=';while(!P3_1);}if(!P3_0){fuhao='/';while(!P3_0);}
}

數(shù)碼管動(dòng)態(tài)顯示函數(shù)

void display(int num1){
	n4=num1%10;
	n3=num1/10%10;
	n2=num1/100%10;
	n1=num1/1000%10;
	P2=0x01;
	P0=duan[n1];
	DelayXms(4);
	P2=0x02;
	P0=duan[n2];
	DelayXms(4);
	P2=0x04;
	P0=duan[n3];
	DelayXms(4);
	P2=0x08;
	P0=duan[n4];
	DelayXms(4);
}

最后是延時(shí)函數(shù)

void DelayXms(unsigned int x)		//@12.000MHz
{	unsigned char i, j;
	while(x--)
	{	i = 2;
		j = 239;
		do{while (--j);
		}while (--i);
	}
}

? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-778854.html


到了這里,關(guān)于51單片機(jī)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(100行)附源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于AT89C51單片機(jī)的計(jì)算器設(shè)計(jì)與仿真

    基于AT89C51單片機(jī)的計(jì)算器設(shè)計(jì)與仿真

    點(diǎn)擊鏈接獲取Keil源碼與Project Backups仿真圖: https://download.csdn.net/download/qq_64505944/87759134?spm=1001.2014.3001.5503 源碼獲取 主要內(nèi)容: 本次設(shè)計(jì)所提出的一種基于單片機(jī)技術(shù)的簡(jiǎn)易計(jì)算器的方案,能更好的解決計(jì)算機(jī)計(jì)算的問題,隨著數(shù)字生活的到來,單片機(jī)在生活中越來越重要,它

    2024年02月03日
    瀏覽(23)
  • 基于AT89C51單片機(jī)四位加法計(jì)算器的設(shè)計(jì)

    基于AT89C51單片機(jī)四位加法計(jì)算器的設(shè)計(jì)

    1.設(shè)計(jì)任務(wù) 利用AT89C51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)四位加法計(jì)算器,設(shè)計(jì)的系統(tǒng)實(shí)用性強(qiáng)、操作簡(jiǎn)單,實(shí)現(xiàn)了智能化、數(shù)字化。 1)、通過4*4矩陣鍵盤輸入數(shù)字及運(yùn)算符; 2)、可以進(jìn)行4位十進(jìn)制數(shù)以內(nèi)的加法 運(yùn) 算。如果計(jì)算結(jié)果超出四位數(shù),則全部顯示“E ” LED燈亮

    2024年02月04日
    瀏覽(25)
  • 基于AT89C51單片機(jī)的簡(jiǎn)易計(jì)算器的設(shè)計(jì)與仿真

    基于AT89C51單片機(jī)的簡(jiǎn)易計(jì)算器的設(shè)計(jì)與仿真

    點(diǎn)擊鏈接獲取Keil源碼與Project Backups仿真圖: https://download.csdn.net/download/qq_64505944/87755299?spm=1001.2014.3001.5503 源碼獲取 本設(shè)計(jì)是以單片機(jī)AT89C51為核心的簡(jiǎn)易計(jì)算器設(shè)計(jì),要通過芯片AT89C51實(shí)現(xiàn)計(jì)算器程序運(yùn)行來完成加、減、乘和除的簡(jiǎn)單計(jì)算功能。 基本要求: 1、采用軟件設(shè)計(jì)與

    2024年02月03日
    瀏覽(28)
  • 【普中】基于51單片機(jī)簡(jiǎn)易計(jì)算器數(shù)碼管顯示設(shè)計(jì)( proteus仿真+程序+實(shí)物演示+講解視頻)

    【普中】基于51單片機(jī)簡(jiǎn)易計(jì)算器數(shù)碼管顯示設(shè)計(jì)( proteus仿真+程序+實(shí)物演示+講解視頻)

    【普中開發(fā)板】基于51單片機(jī)簡(jiǎn)易計(jì)算器數(shù)碼管顯示設(shè)計(jì)( proteus仿真+程序+實(shí)物演示+講解視頻) Proteus 仿真:Proteus 8.16(有低版本) 程序編譯器:keil 4/keil 5 編程語言:C語言 設(shè)計(jì)編號(hào):P04 普中開發(fā)板實(shí)驗(yàn)設(shè)計(jì) 本設(shè)計(jì)旨在設(shè)計(jì)一個(gè)基于51單片機(jī)的簡(jiǎn)易計(jì)算器仿真設(shè)計(jì)。 功能要求

    2024年02月02日
    瀏覽(28)
  • 單片機(jī)實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,附有解析與代碼

    單片機(jī)實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,附有解析與代碼

    目錄 首先分為根據(jù)要實(shí)現(xiàn)的功能來選擇硬件和軟件: 硬件部分 軟件部分 輸入部分: 計(jì)算部分: 連續(xù)計(jì)算: 源代碼示例: 主函數(shù): 鍵盤輸入: LCD1602顯示: 蜂鳴器: 延時(shí)函數(shù): 首先我們要實(shí)現(xiàn)的功能有:多位顯示,小數(shù)計(jì)算,連續(xù)計(jì)算,符號(hào)按錯(cuò)修改,, 用到LCD1602顯示

    2024年02月09日
    瀏覽(21)
  • 基于AT89C52單片機(jī)的計(jì)算器設(shè)計(jì)與仿真

    基于AT89C52單片機(jī)的計(jì)算器設(shè)計(jì)與仿真

    點(diǎn)擊鏈接獲取Keil源碼與Project Backups仿真圖: https://download.csdn.net/download/qq_64505944/88637995?spm=1001.2014.3001.5503 源碼獲取 B 源碼+仿真圖+課程設(shè)計(jì)+51 摘 要 計(jì)算器一般是指“電子計(jì)算器”,能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,結(jié)構(gòu)簡(jiǎn)單,功能較弱,但由于它使用方便、操

    2024年01月16日
    瀏覽(37)
  • 51單片機(jī)實(shí)現(xiàn)簡(jiǎn)單的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)

    51單片機(jī)實(shí)現(xiàn)簡(jiǎn)單的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)

    (1)設(shè)計(jì)一個(gè)洗衣機(jī)控制系統(tǒng),用直流電機(jī)的轉(zhuǎn)速表征三種不同洗衣方式:弱洗、強(qiáng)洗、漂洗; (2)用三個(gè)獨(dú)立按鍵設(shè)置待洗衣物的不同洗滌方式,實(shí)現(xiàn)最長(zhǎng)10分鐘定時(shí): ????絲質(zhì)衣服: 漂洗 定時(shí)3分鐘 棉質(zhì)衣服:弱洗 2分鐘;強(qiáng)洗 5分鐘;漂洗 3分鐘; 化纖衣服: 強(qiáng)洗

    2023年04月19日
    瀏覽(27)
  • Qt實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    Qt實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    三級(jí)項(xiàng)目想用Qt做界面。 為了熟悉一下Qt操作,歷時(shí)8h做了個(gè)計(jì)算器。 沒用到數(shù)據(jù)庫,布的控件也比較簡(jiǎn)單。 所以calculator.pro和widget.ui就不放了(太長(zhǎng)了占地方) 文件壓縮包放在下一篇了,需要自取。 自學(xué)時(shí)間較短,有很多不足歡迎指正。 ?:del按鍵上的圖片用的是絕對(duì)路

    2024年02月11日
    瀏覽(29)
  • 模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器
  • 【Python】簡(jiǎn)單計(jì)算器實(shí)現(xiàn)(四)

    解決思路: 最后,我們來看看最簡(jiǎn)單的運(yùn)算函數(shù)和判斷運(yùn)算符函數(shù)。 定義函數(shù): def calculate(n1, n2, operator) param n1: float param n2: float param operator: + - * / return: float 定義函數(shù): def is_operator(e) param e: str return: bool 最后的調(diào)用 這里定義了兩個(gè)變量 result 和 _ 來接收 final_calc 返回的兩個(gè)

    2024年02月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包