請問如何用微控制器做簡單的計算器需要哪些元器件和材料

2021-03-04 00:06:29 字數 7749 閱讀 5699

1樓:匿名使用者

簡單元器件=微控制器+1602lcd+4*4鍵盤

2樓:匿名使用者

硬體就樓下說的那些。下面就是軟體的編寫

用微控制器做一個簡單計算器需要什麼模電知識?

3樓:匿名使用者

除了會微控制器程式設計外,基本上全是數位電路知識

除微控制器,需要的器件只有液晶顯示屏或數碼管加一些按鍵

怎樣用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語言或者a**組合語言進行除錯 ;

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機接好,開啟使用者板電源;

5樓:心脆任憔悴

1、硬體**圖

硬體部分比較簡單,當鍵盤按鍵按下時它的那一行、那一列的埠為低電平。因此,只要掃描行、列埠是否都為低電平就可以確定是哪個鍵被按下。

2、主程式流程圖

程式的主要思想是:將按鍵抽象為字元,然後就是對字元的處理。將運算元分別轉化為字串儲存,操作符儲存為字元形式。

然後呼叫***pute()函式進行計算並返回結果。具體程式及看註釋還有流程圖。

3、altium designer畫的pcb圖

4、程式源**

#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);

uint ***pute(uint va1,uint va2,uchar optor);

uchar code table = ;

uchar dbuf[8] = ;

void delay(uint z)

uchar keyscan()

while((p1 & 0xf0) != 0xf0) ;}

}p1 = 0xfd;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}p1 = 0xfb;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}p1 = 0xf7;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}return skey;

}void main()

while(1)

}else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

else if(ckey == '=')}}

else if(ckey == '$')

}disp();}}

uint ***pute(uint va1,uint va2,uchar optor)

return value;

}void buf(uint val)

else

for(i = 7; val > 0; i--)

for( ; i > 0; i--)

dbuf[i] = 10;

}void disp(void)}

6樓:該使用者未註冊

|程式和電路圖如下:

#include

#define din p1_0

#define clk p1_2

#define load p1_1

unsigned char key_h,key_l,key_code;

unsigned char ads,i,j,m,n;

unsigned char n_bit=0;

unsigned char flag=0;

unsigned char key_num[16]=;

unsigned char data1[6]=;

unsigned char data2[6]=;

unsigned int result;

void delay(unsigned int n)void send(unsigned char addr,unsigned char dat)

i+=8;

}load=1;

}void clear()

void calc()

clear();

for(n=6;n>1;n--)

flag=0;

while((p2&0xf0)!=0xf0);

}void keyscan() //鍵盤掃描程式key_code=key_l*4+key_h;

switch(key_code)

send(n_bit--,key_num[key_code]);

if(!flag)

data1[n_bit]=key_num[key_code];

else

7樓:金尚精品

^剛做過,發給你參考下

這是原理圖

51微控制器簡易計算器程式:

#include

#include

#define uchar unsigned char

#define uint unsigned int

//---------定義引腳--------------------

bit clr=0;

bit ok=0;

bit xiaoshu=0;

bit jiego=0;

bit first_1=1;

bit first_2=1;

sbit dout = p3^2;

sbit load = p2^0;

sbit din = p2^1;

sbit dclk = p2^2;

sbit beer=p0^1;

sbit lcd1602_rs=p2^3;

sbit lcd1602_rw=p2^4;

sbit lcd1602_e=p2^5;

//---------定義變數--------------------

uchar ch451_key=0xff;

uchar yun_sign;

uchar xiabiao=0;

uchar tab[32];

uchar tab1=;

uchar tab2=;

uchar tab3=;

float opr_1=0,opr_temp=0,end=0,a;

//---------宣告函式--------------------

void ch451_init(void); //ch451初始化

void ch451_write(uint ***mand);//寫命令或資料到ch451

uchar ch451_read(void); //讀按鍵值

uchar get_char(void);

void lcd_init(void);//初始化;

void delay(unsigned int k);//延時程式

void lcd_inter_***mand(unsigned char ***mand);//寫入控制字

void lcd_inter_dat(unsigned char dat);//寫入要顯示的資料

void set_xy(unsigned char x,unsigned char y);//找地址

void write(unsigned char date);//寫入字元

void lcdbusy();//查忙時

void display(void);

void spec(void);

void get_end(void);

void hun_he(uchar n);

//-------- 主函式----------------------

void main()

lcd_inter_***mand(0xc0);//從第二行開始顯示

for(i=0;i<=14;i++)

delay(0xffff);

delay(0xffff);

lcd_inter_***mand(0x01);

while(1)}}

//----------子函式--------------------

void hun_he(uchar n)

}else

break;

}default:break;}

}void ch451_init(void)//ch451初始化

void ch451_write(uint ***mand)//寫命令或資料到ch451

load = 1;

ex0 = 1;

}uchar ch451_read(void)//讀按鍵值

load = 1;

key = 0;

for(i=0;i<7;i++) //從ch451讀出按鍵值

ex0 =1;

return key;

}void ex0_isr(void)interrupt 0 //中斷程式

temp=get_char();

if(temp)

if(xiabiao>=16)lcd_inter_***mand(0xc0);//若大於16,則從第2行開始顯示

if(ok) get_end();

beer=0;

delay(3000);

beer=1;

}uchar get_char(void)

return dis;

}void spec(void) //特殊功能鍵

break; //左移

case 0x54:lcd_inter_***mand(0x14);break; //右移

default:break;}}

void delay(unsigned int k)//延時程式

void lcd_inter_***mand(unsigned char ***mand)//寫入控制字

void lcd_init(void)//初始化;

void lcd_inter_dat(unsigned char dat)//寫入要顯示的資料

void lcdbusy()//查忙

void display(void) //轉化在lcd上顯示計算結果

}else }}

void get_end(void)//計運算元程式

switch(tab[i])

else hun_he(lianji_sign);opr_1=0;lianji_sign='+'; break;

case '-': xiaoshu=1;yun_sign='-';if(opr_temp==0)else hun_he(lianji_sign);opr_1=0;lianji_sign='-'; break;

case 'x': xiaoshu=1;yun_sign='x';if(opr_temp==0)else hun_he(lianji_sign);opr_1=0;lianji_sign='*';break;

case '/': xiaoshu=1;yun_sign='/';if(opr_temp==0)else hun_he(lianji_sign);a=opr_1;opr_1=0;lianji_sign='/';break;

case '=':

switch(yun_sign)//進行運算

}else

break;

}default:break;

}ok=1;//開始進行顯示,標誌位置1

xiabiao=0;//小數的標誌位清零

break;

default:break;

}i++;

if(xiao_flag)//表示小數

xiao_flag=0; }}

if(fu_flag)}}

opr_1=0;

opr_temp=0;

xiabiao=0;

xiaoshu=1;}

微控制器控制舵機的問題,如何用51微控制器控制舵機的?怎樣編寫程式啊?大哥幫幫忙

請教一下,如何使用at89s52編寫這樣一個程式。要求,微控制器控制舵機,讓舵機到中間位置後,左轉15度,延遲2ms,右轉15度。度數不要求精確 舵機為0.5 2.5ms。是舵機正反轉 要c的,不要彙編 一定是應用定時器來控制脈衝的。多少脈衝舵機轉動1度?0.5ms到2.5ms是180度。0.5是起...

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

1 首先第一步就是要進行查詢元器件並放入到原理圖中,如下圖所示。2 接著就是要進行原理圖連線根據網路標籤的方式即可。3 然後就是要進行編寫程式,程式源 include include include include define uchar unsigned char define uint uns...

如何用組合語言實現微控制器比較轉移

pan clr cy mov 30h,a subb a,10 jb cy,prog1 mov a,30h clr cy subb a,20 jb cy,prog2 mov a,30h clr cy subb a,30 jb cy,prog3 prog1 nop prog2 nop prog3 nop...