1樓:匿名使用者
要求還不低,i簡單的我有,不能實現混合運算比較
主程式如下:
void main()
c++;
} display(b1,b2,b3,b4,b5,b6);
}while(c==7) //輸入計算符號
c=1;
} while(c<7) //輸入第2個6 位數
c++;
} display(d1,d2,d3,d4,d5,d6);
}p1=0;
bb= b1*100000+b2*10000+b3*1000+b4*100+b5*10+b6;
dd=d1*100000+d2*10000+d3*1000+d4*100+d5*10+d6;
while(keyval!=15) //等待按下"="號
delay(100);
switch(d1)//根據輸入的運算子,作不同的運算
else ee=bb-dd;
break;
case 12:ee=bb*dd; break;//乘
case 13:ee=bb/dd; break; //除
}f1=ee/100000%10;;// 分離 個十百千萬
f2=ee/10000%10;
f3=ee/1000%10;
f4=ee/100%10;
f5=ee/10%10;
f6=ee%10;
display(f1,f2,f3,f4,f5,f6);//顯示運算結果}}
怎樣用51微控制器做計算器啊?
2樓:浮生梔
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機接好,開啟使用者板電源;
3樓:心脆任憔悴
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)}
4樓:該使用者未註冊
|程式和電路圖如下:
#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
5樓:金尚精品
^剛做過,發給你參考下
這是原理圖
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微控制器做能運算小數的計算器
你好!顯示是液晶還是數碼管?精確到幾位小數?51微控制器計算出的小數如何儲存 熟悉c51的算術運算子功能,就明白了。51微控制器中是沒有小數的,x y 得到的結果是商的整數,x y得到的是商的餘數。如果想精確計算商的小數,需要運用演算法,最直接的演算法就是,將餘數乘10倍,即餘數 10 y,得到第一...
51微控制器的計算器計算結果會不會有誤差
浮點數計算有誤 差抄,整數計算沒有誤差。你的演算法如果採用了浮點計算,就會有誤差,為了減小誤差,可採用雙精度型浮點運算。不過,對於微控制器而言,這個要求太高了。另外,也可檢查一下程式,應該不會有這麼大的誤差。應該 是程式的 錯誤 但在 51裡 不建議 用 浮點數 運算,這太浪費 cpu 時間 51微...
微控制器中數碼管數字部分和小數點的點亮規則是什麼啊
你好,我bai不懂你的電路圖是怎麼du 的,但是zhi數碼管的小數點是這樣的dao,p0 table1 ge 你這個是定址的後回面加個點就得答了,給為 p0 table1 ge 0x80 或者p0 table1 ge 0x80應該都一樣的 0x80就是那個點亮,不懂你是公陽還是共陰的,如果是公陽的是...