微控制器做計算器的程式,怎樣用51微控制器做計算器啊?

時間 2021-08-30 09:49:25

1樓:刺友互

1、直接呼叫庫函式。

2、下面是函式的配置,從中可以看出,i=0時,埠25.16.4所對應的燈亮,i=1時,埠27.28.5所對應的燈亮,在for迴圈中,兩組燈交替閃爍。

3、通過自定義巨集進行操作,來實現。

4、自定義的巨集如下,將燈的埠及開關,通過自定義巨集的方式,可以在程式中進行直接操作。

5、直接控制埠所對應的暫存器。

6、直接操作暫存器,需要定義埠對應的暫存器。

2樓:匿名使用者

#include

#define uchar unsigned char;

uchar led1,led2,led3,led4;

uchar keyval,calflag,s_dat,d_dat;

uchar distab=;

unsigned int number,r_dat;

void delay(unsigned int a)

unsigned int i,j;

for(i=0;ifor(j=0;j<1000;j++);

void dealdat()

switch(calflag)

case 0:

r_dat=s_dat+d_dat;

break;

case 1:

r_dat=s_dat-d_dat;

break;

case 2:

r_dat=s_dat*d_dat;

break;

case 3:

r_dat=s_dat/d_dat;

break;

default:break;

led1=(r_dat/1000)%10;

led2=(r_dat/100)%10;

led3=(r_dat/10)%10;

led4=r_dat%10;

uchar kbscan(void)

unsigned char sccode,recode;

p3=0x0f;  //發0掃描,列線輸入

if ((p3 & 0x0f) != 0x0f)  //有鍵按下

delay(20);   //延時去抖動

if ((p3&0x0f)!= 0x0f)

sccode = 0xef;    //逐行掃描初值

while((sccode&0x01)!=0)

p3=sccode;

if((p3&0x0f)!=0x0f)

recode=(p3&0x0f)|0xf0;

return((~sccode)+(~recode));

else

sccode=(sccode<<1)|0x01;

return 0;  //無鍵按下,返回0

}void getkey(void)

unsigned char key;

key=kbscan();

if(key==0)

switch(key)

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}void t0isr() interrupt 1

th0=0xf4;

tl0=0x48;

switch(number)

case 0:p2=0x04;p0=distab[led1];break;

case 1:p2=0x08;p0=distab[led2];break;

case 2:p2=0x01;p0=distab[led3];break;

case 3:p2=0x02;p0=distab[led4];break;

default:break;

number++;

if(number>3)number=0;

main()

tmod = 0x01;

number = 0;

th0=0xf4;

tl0=0x48;

tr0=1;

et0=1;

ea=1;

led1=0;

led2=0;

led3=0;

led4=0;

while(1)

getkey();

switch(keyval)

case 0:

case 1:

case 2:

case 3:

case 4:

case 5:

case 6:

case 7:

case 8:

case 9:

led3=led4;

led4=keyval;

led1=0;

led2=0;

break;

case 10:break; //"on"

case 11: //"="

d_dat=led3*10+led4;

dealdat();

break;

case 12: //"/"

calflag=3;

s_dat=led3*10+led4;

led3=0;

led4=0;

break;

case 13: //"*"

calflag=2;

s_dat=led3*10+led4;

led3=0;

led4=0;

break;

case 14: //"-"

calflag=1;

s_dat=led3*10+led4;

led3=0;

led4=0;

break;

case 15: //"+"

calflag=0;

s_dat=led3*10+led4;

led3=0;

led4=0;

break;

default:break;

3樓:百度文庫精選

內容來自使用者:manenxy

/**************** p2位選p0段選時鐘12mhz *********************/

#include /*包含的標頭檔案*/

#define uchar unsigned char /*巨集定義*/

#define uint unsigned int

uchar led[17] = ; /*數碼管段選*/

long float number=; /*數碼管顯示位控制暫存器*/

uchar a=;

long int d = ; //數碼管顯示內容暫存器uchar code c = ; /*數碼管位選*/

/*列掃描控制led 1位2位3位4位5位6位7位8位*/

uchar k=16; /*按鍵對外控制*/

uchar b; /*按鍵【+】【-】【*】【/】對外的控制*/

long float out_put; /*定義變數【out_put】作為結果*/

uchar e=0; /*數字的位儲存遞進的控制*/

uchar g=0; /*運算方式的控制變數*/

uchar l=0; /*運算方式的控制變數*/

uchar g1=0; /*運算方式的控制變數*/

uchar g2=0; /*運算方式的控制變數*/

uchar g3=0; /*運算方式的控制變數*/

uchar g4=0; /*運算方式的控制變數*/

char j=-1; /*與number陣列連用*/

uchar m=0; /*按鍵【=】的控制變

怎樣用51微控制器做計算器啊?

4樓:浮生梔

1、首先第一步就是要進行查詢元器件並放入到原理圖中,如下圖所示。

2、接著就是要進行原理圖連線根據網路標籤的方式即可。

3、然後就是要進行編寫程式,

程式源**

#include #include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

4、最後一步就是進行驗證正確後編譯程式在protues中載入hex觀察**結果是否正確,如下圖所示。

擴充套件資料

電腦**:

微控制器有了開發系統,隨著微控制器的發發系統也在不斷髮展。 keil是一種先進的微控制器整合開發系統。

它代表著組合語言微控制器開發系統的最新發展,首創多項便利技術,將開發的程式設計/**/除錯/寫入/加密等所有過程一氣呵成,中間不須任何編譯或彙編。

功能特性:

1、可以**63k程式空間,接近64k 的16位地址空間;

2、可以**64kxdata 空間,全部64k 的16位地址空間;

3、可以真實**全部32 條io腳;

4,完全相容keilc51 uv2 除錯環境,可以通過uv2 環境進行單步,斷點, 全速等操作;

5、可以使用c51語言或者asm組合語言進行除錯 ;

6、可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;

7、可選 使用使用者晶振,支援0-40mhz晶振頻率;

8、片上帶有768位元組的xdata,您可以在**時選 使用他們,進行xdata 的**;

9、可以**雙dptr 指標;

10、可以**去除ale 訊號輸出. ;

11、自適應300-38400bps 的所有波特率通訊;

12、體積非常細小,非常方便插入到使用者板中.插入時緊貼使用者板,沒有連線電纜,這樣可以有效地減少執行中的干擾,避免**時出現莫名其妙的故障;

13、**插針採用優質鍍金插針,可以有效地防止日久生鏽,選擇優質園腳ic插座,保護**插針,同時不會損壞目標板上的插座. ;

14,**時監控和使用者**分離,不可能產生不能**的軟故障;

15、rs-232介面不計成本採用max202積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。

功能限制:

**器佔用微控制器串列埠及定時器2,與keil c(pc)通訊,故不支援串列埠及定時器2 的**功能。全速執行時微控制器串列埠及定時器2 可供使用者使用。

使用方法:

1、將**器插入需**的使用者板的cpu插座中,**器由使用者板供電;

2、將**器的序列電纜和pc機接好,開啟使用者板電源;

微控制器的簡易計算器,怎麼用51微控制器做簡易計算器?

基本功能介紹 簡單的加減乘除的運算。時間顯示功能,而且能實現計算器模組和時間模組之間的任意切換。按鍵音卻換功能。原理 多功能微控制器計算器是一個實現加減乘除的和時間功能的計算器,主要的硬體組成由,一個at89s52微控制器晶片,一個led液晶 1602液晶 一個4 4鍵盤,和4個特殊功能按鍵。一個時...

51微控制器呼叫子程式問題,怎樣51微控制器呼叫兩個子程式

直接跳回主程式,再初始化。怎樣51微控制器呼叫兩個子程式 5 天蠍神經俠侶 mov r0,08h mov a,0feh loop mov p1,a lcall del rr a djnz r0,loop 使用djnz 指令。為0執行下一指令,不為0跳轉。就可以呼叫內兩個容子程式了 估計是進入到倒計時...

51微控制器定時器中斷程式

m愛人 再次重新啟動。用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出一個機器週期,機器週期 12 n n指晶振頻率 假設你要定時的時間為m,那麼定時的初值為 m 機器週期 初值 th0 65536 初值 256 tl0 65536 ...