![單片機(jī)開(kāi)發(fā)板計(jì)算器電梯密碼鎖萬(wàn)年歷交通燈課程設(shè)計(jì)寶貝及程序_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e1.gif)
![單片機(jī)開(kāi)發(fā)板計(jì)算器電梯密碼鎖萬(wàn)年歷交通燈課程設(shè)計(jì)寶貝及程序_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e2.gif)
![單片機(jī)開(kāi)發(fā)板計(jì)算器電梯密碼鎖萬(wàn)年歷交通燈課程設(shè)計(jì)寶貝及程序_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e3.gif)
![單片機(jī)開(kāi)發(fā)板計(jì)算器電梯密碼鎖萬(wàn)年歷交通燈課程設(shè)計(jì)寶貝及程序_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e4.gif)
![單片機(jī)開(kāi)發(fā)板計(jì)算器電梯密碼鎖萬(wàn)年歷交通燈課程設(shè)計(jì)寶貝及程序_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/4/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e/c2ebe33e-308f-4938-b1a5-b2c1b51dd61e5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、開(kāi)發(fā)板 實(shí)驗(yàn)報(bào)告 設(shè) 計(jì) 課 題:基于單片機(jī)的簡(jiǎn)易計(jì)算器指 導(dǎo) 老 師: 班 級(jí): 學(xué) 號(hào): 姓 名: 一 設(shè)計(jì)內(nèi)容和目的本次實(shí)驗(yàn)的任務(wù)就是要以51系列單片機(jī)為核心實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器計(jì)算器,它的結(jié)構(gòu)非常簡(jiǎn)單,外部主要由4*4矩陣鍵盤(pán)和一個(gè)液晶顯示屏構(gòu)成,內(nèi)部由一塊AT89C51單片機(jī)構(gòu)成,通過(guò)軟件編程可實(shí)現(xiàn)簡(jiǎn)單加減乘除。目的:做自己喜歡的實(shí)驗(yàn),提高自學(xué)能力。二 方案論證經(jīng)分析,計(jì)算器電路包括三個(gè)部分:顯示電路、4*4鍵掃描電路、單片機(jī)微控制電路。具體如下:1) LCD顯示電路 LCD1602作為一個(gè)成熟的產(chǎn)品,使用簡(jiǎn)單,模式固定,便于移植到各種類(lèi)型的程序,但是初學(xué)者往往要注意結(jié)合LCD本身的時(shí)
2、序圖來(lái)完善初始化程序。又以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),故采用LCD.2) 4*4鍵盤(pán)掃描電路(中斷式,掃描式,反轉(zhuǎn)式)用戶(hù)設(shè)計(jì)行列鍵盤(pán)接口,一般常采用3 種方法讀取鍵值。一種是中斷式,外兩種是掃描法和反轉(zhuǎn)法。中斷式:在鍵盤(pán)按下時(shí)產(chǎn)生一個(gè)外部中斷通知CPU,并由中斷處理程序通過(guò)不同的地址讀取數(shù)據(jù)線上的狀態(tài),判斷哪個(gè)案件被按下。本實(shí)驗(yàn)采用中斷式實(shí)現(xiàn)用戶(hù)鍵盤(pán)接口。掃描法:對(duì)鍵盤(pán)上的某一行送低電平,其他行為高電平,然后讀取列值。若列值中有一位是低,則表明該行與低電平對(duì)應(yīng)列的鍵被按下;否則,掃描下一行。反轉(zhuǎn)法:先將所有行掃描線輸出低電平,讀列值。若列值有一位是低,則表明有鍵按下,
3、讀列值;然后所有列掃描線輸出低電平,再讀行值。根據(jù)讀到的值組合就可以查表1 得到的鍵碼。這個(gè)就仁者見(jiàn)仁智者見(jiàn)智了,不過(guò)如果熟悉了掃描式,建議果斷升級(jí)自己的硬件(很簡(jiǎn)單加個(gè)74LS08與門(mén)),故采用節(jié)省CPU的中斷式掃描電路。 ) 單片機(jī)微控制電路微控制電路就是以AT89C51為核心的控制核心,主要注意晶振電路的接法和復(fù)位電路的接法。三 硬件電路的設(shè)計(jì)21 硬件設(shè)計(jì)電路框圖51系列單片機(jī)系統(tǒng)4*4鍵盤(pán)LCD顯示 晶振電路復(fù)位電路線路原理框圖22 硬件設(shè)計(jì)電路的元件清單器件名稱(chēng)數(shù)量AT89C511按鍵1774LS08110K電阻9電容22uF1LCD16021晶振12MHz1電容30pF25K電位
4、器123 硬件設(shè)計(jì)電路圖將4*4的鍵盤(pán)直接接在P1口上,用P0口作為L(zhǎng)CD的顯示輸出,P3.2口的INT0作為外部中斷位。24 硬件設(shè)計(jì)的補(bǔ)充說(shuō)明四 軟件設(shè)計(jì)程序及描述本程序組成可分為3個(gè)模塊:矩陣鍵盤(pán)模塊,LCD顯示模塊,和運(yùn)算模塊(源程序見(jiàn)底頁(yè))開(kāi)始初始化參數(shù)初始化LCD顯示有鍵輸入?讀取鍵碼LCD顯示數(shù)字鍵清零鍵功能鍵狀態(tài)清零輸入數(shù)值數(shù)值送顯示緩沖YN等待數(shù)值輸入結(jié)果送顯示緩沖根據(jù)上次功能鍵和輸入的數(shù)據(jù)計(jì)算結(jié)果本次功能鍵?等待數(shù)值輸入結(jié)果送顯示緩沖等待數(shù)值輸入結(jié)果送顯示緩沖五 硬軟件的調(diào)試及方法我個(gè)人遇到的主要問(wèn)題出現(xiàn)在LCD1602上,要不是我自己買(mǎi)了塊新的LCD恐怕我的結(jié)論,就只能在
5、軟件仿真實(shí)現(xiàn)了。硬件上:在不加芯片調(diào)試時(shí),LCD1602只顯示一排全黑,一般說(shuō)明該元件是好的。(但也不一定,我那時(shí)就一直認(rèn)為我的元件沒(méi)壞);給15,16管腳分別接上+5v和0v,測(cè)試背光是否完好;給VEE接上電位器,檢查對(duì)比度是否可調(diào);一般LCD易出現(xiàn)的現(xiàn)象,我再做實(shí)驗(yàn)的時(shí)候遇到過(guò)以下幾種情況:狀態(tài)1 上電之后,1602的第一行全黑,即16個(gè)5x7黑塊產(chǎn)生原因:液晶根本就沒(méi)有進(jìn)行初始化操作,需要檢查連線或者程序。運(yùn)氣不好的情況下就是整塊LCD是壞的。狀態(tài)2 屏上顯示兩排灰格 產(chǎn)生原因:程序中對(duì)液晶初始化不正常,應(yīng)是部分初始化指令沒(méi)有正常接收,建議按照標(biāo)準(zhǔn)初始化步驟調(diào)整程序,或者調(diào)整指令之間的延
6、時(shí)(加大一些試試)-補(bǔ)充:也有可能是對(duì)比度太大,建議優(yōu)先調(diào)整對(duì)比度電阻 狀態(tài)3 顯示亂碼 這是我在實(shí)驗(yàn)室組合版上做的,原因是接線問(wèn)題狀態(tài)3 正確顯示 六 實(shí)驗(yàn)結(jié)果與性能達(dá)標(biāo)我的計(jì)算器只能準(zhǔn)確進(jìn)行得數(shù)為09的四則運(yùn)算。1.加法計(jì)算2.減法計(jì)算3.乘法計(jì)算4.除法計(jì)算5.字符顯示實(shí)物與仿真不一致。這就是傳說(shuō)中的BUG了。我不明白。七 實(shí)驗(yàn)改進(jìn)與心得體會(huì)很明顯我的計(jì)算器處理數(shù)據(jù)及顯示存在太大的局限性,我覺(jué)得主要還是我對(duì)程序中的運(yùn)算模塊理解不深,這點(diǎn)仍需大大加強(qiáng)。這個(gè)實(shí)驗(yàn)給我的感覺(jué),硬件和軟件上都不是很難。我的焊工也不馬虎,即使難看了點(diǎn),但只要軟件能行,就能完美運(yùn)行。可惜,我就敗在LCD1602,從學(xué)
7、校拿了兩塊,幸好最后實(shí)在沒(méi)辦法,自己買(mǎi)了一塊。最終證實(shí)我之前的實(shí)驗(yàn)就是LCD的損壞。沒(méi)知識(shí)真可怕,我不懂真正排查L(zhǎng)CD的好壞。不過(guò)也因禍得福,我在磕磕碰碰中,固執(zhí)的認(rèn)為L(zhǎng)CD是好的,反而使我對(duì)LCD初始化,LCD字符顯示,3種不同的矩陣鍵盤(pán)掃描的方法,及軟件上的巧妙技巧有了更好的了解。我在這次實(shí)驗(yàn)上,感覺(jué)收獲的更多. 下面是源代碼:#include<reg51.h>#define CLEARSCREEN LCD_write_command(0x01) #define uint unsigned int #define uchar unsigned char/*定義接口*/ #def
8、ine LCDIO P0#define KEYBOARD P1/保留sbit LCD1602_RS=P20; sbit LCD1602_RW=P21; sbit LCD1602_EN=P22; /*/code uchar mayuan16='0','1','2','3','4','5','6','7','8','9','0','/','*','-','+',
9、'='/不錯(cuò),這個(gè)比較明了unsigned char code keycode=0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88;/鍵盤(pán)編碼值()int i,j,k=1,s;/int t,t1,t2,a;/void delay(uchar);/延時(shí)/*定義函數(shù)*/void LCD_init(void);/初始化函數(shù)void delay_nms(unsigned int n);/延時(shí)函數(shù)void LCD_write_command(unsigned char comman
10、d);/寫(xiě)入指令函數(shù)void LCD_write_dat(unsigned char dat);/寫(xiě)入數(shù)據(jù)函數(shù)void delay_10ms();initial();uchar keyscan();/鍵盤(pán)掃描函數(shù)calc(uchar);/計(jì)算函數(shù)uchar num,temp,key,keynum;void main()/主函數(shù)LCD_init();delay_nms(100);while(1)initial();/有中斷KEYBOARD =0xf0;/鍵盤(pán)的列值全置高電平/*開(kāi)中斷*/initial()EA=1;/總開(kāi)關(guān)EX0=1;/中斷方式0開(kāi)啟IT0=0;/*/*中斷函數(shù)*/void in
11、ter0() interrupt 0unsigned char n;delay_10ms();/延時(shí)if(INT0=0)/沒(méi)鍵按下EX0=0;/關(guān)中斷n=keyscan();calc(n);EX0=1;/開(kāi)中斷KEYBOARD=0xf0;/鍵盤(pán)的列值全置高電平/*/calc(uchar n)if(n<10)/鍵值小于10t1=t1*10+n;LCD_write_command(0x00);/寫(xiě)命令語(yǔ)句LCD_write_dat(mayuann);/寫(xiě)數(shù)據(jù)函數(shù)elseif(n=10)LCD_init();t1=0;t2=0,t=0;k=1;elseif(n<15)t2=t1;t1=0
12、;j=n;LCD_write_command(0x00);LCD_write_dat(mayuann);elseLCD_write_command(0x00);LCD_write_dat(mayuann);switch(j)case 11:t=t2/t1;break;case 12:t=t2*t1;break;case 13:t=t2-t1;break;case 14:t=t2+t1;break;if(t<=9)LCD_write_command(0x00);LCD_write_dat(t+48);if(t>9)while(t>9)s=t%10;t=t/10;ak=s;k+;
13、if(t<=9)LCD_write_command(0x00);LCD_write_dat(t+48);for(i=k-1;i>=1;i-)LCD_write_command(0x00);LCD_write_dat(ai+48);/*鍵盤(pán)掃描函數(shù)*/uchar keyscan()/鍵盤(pán)掃描KEYBOARD=0xf0;/鍵盤(pán)的列值全置高電平delay_10ms();/延時(shí)if(KEYBOARD!=0xf0)/有鍵按下temp=KEYBOARD;/保存鍵盤(pán)此刻的鍵植delay_10ms();/延時(shí)if(KEYBOARD=temp)/再次確認(rèn)鍵盤(pán)是否被按下uchar i;KEYBOARD
14、=0x0f;/鍵盤(pán)的行值全置高電平delay_10ms();/10MS時(shí)間延時(shí)keynum=temp | KEYBOARD;/保存鍵盤(pán)的行值while(KEYBOARD!=0x0f);/松手檢測(cè)for(i=0;i<16;i+)if(keycodei=keynum)return (i);return -1;/*/* 延時(shí)*/void delay_nms(unsigned int n) unsigned int i=0,j=0; for (i=n;i>0;i-) for (j=0;j<10;j+); void delay_10ms()/10MS延時(shí)unsigned char i,
15、j;for(i=0;i<10;i+)for(j=0;j<120;j+);/*/ /*寫(xiě)指令函數(shù)*/ void LCD_write_command(unsigned char command) LCDIO=command; LCD1602_RS=0; LCD1602_RW=0; LCD1602_EN=0; LCD1602_EN=1; delay_nms(10);/*/*寫(xiě)數(shù)據(jù)函數(shù)*/void LCD_write_dat(unsigned char dat)LCDIO=dat;LCD1602_RS=1;LCD1602_RW=0;LCD1602_EN=0;delay_nms(1);LCD
16、1602_EN=1;/*/ /*初始化函數(shù)*/void LCD_init(void)CLEARSCREEN;/clear screenLCD_write_command(0x38);/set 8 bit data transmission modeLCD_write_command(0x0c);/open display (enable lcd display)LCD_write_command(0x80);/set lcd first display addressCLEARSCREEN;/clear screen/*/為了方便初學(xué)者學(xué)習(xí)LCD,特留下字符顯示代碼,電路圖與本實(shí)驗(yàn)一致。已通過(guò)
17、實(shí)物測(cè)試,絕對(duì)沒(méi)問(wèn)題。#include <reg51.h>unsigned char table1=0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01
18、, 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00, 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00;/心圖案unsigned char table=0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00;/字符 #define CLEARSCREEN LCD_write_command(0x01) /*定義接口*/ #define LCDIO P0sbit LCD1602_RS=P20; sbit LCD1602_RW=P21; sbit LCD1602_EN=P22; /*定義函數(shù)*/void LCD_
19、write_command(unsigned char command);/寫(xiě)入指令函數(shù)void LCD_write_dat(unsigned char dat);/寫(xiě)入數(shù)據(jù)函數(shù)void LCD_set_xy( unsigned char x, unsigned char y );/設(shè)置顯示位置函數(shù)void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);/顯示一個(gè)字符函數(shù)void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);/顯示字符串
20、函數(shù)void LCD_init(void);/初始化函數(shù)void delay_nms(unsigned int n);/延時(shí)函數(shù)/*/ /*初始化函數(shù)*/void LCD_init(void)CLEARSCREEN;/clear screenLCD_write_command(0x38);/set 8 bit data transmission modeLCD_write_command(0x0c);/open display (enable lcd display)LCD_write_command(0x80);/set lcd first display addressCLEARSCREE
21、N;/clear screen/*/ /*寫(xiě)指令函數(shù)*/ void LCD_write_command(unsigned char command) LCDIO=command; LCD1602_RS=0; LCD1602_RW=0; LCD1602_EN=0; LCD1602_EN=1; delay_nms(10);/*/*寫(xiě)數(shù)據(jù)函數(shù)*/void LCD_write_dat(unsigned char dat)LCDIO=dat;LCD1602_RS=1;LCD1602_RW=0;LCD1602_EN=0;delay_nms(1);LCD1602_EN=1;/*/ /*設(shè)置顯示位置*/voi
22、d LCD_set_xy( unsigned char x, unsigned char y )unsigned char address;if (y = 1) address = 0x80 + x;else address =0xc0+ x;LCD_write_command(address);/*/ /*顯示一個(gè)字符*/void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)LCD_set_xy( x, y );LCD_write_dat(dat);/*/ /*顯示字符串函數(shù)*/void LCD_dsp_string(
23、unsigned char X,unsigned char Y,unsigned char *s) LCD_set_xy( X, Y ); while (*s) LCD_write_dat(*s); s +; /*/ /* 延時(shí)*/void delay_nms(unsigned int n) unsigned int i=0,j=0; for (i=n;i>0;i-) for (j=0;j<10;j+); /*/ /*主函數(shù)*/void main(void)unsigned char i,j,k,tmp;LCD_init();delay_nms(100);tmp=0x40;/設(shè)置C
24、GRAM地址的格式字k=0;for(j=0;j<8;j+) for(i=0;i<8;i+) LCD_write_command(tmp+i); / 設(shè)置自定義字符的 CGRAM 地址 delay_nms(2); LCD_write_dat(table1k); / 向CGRAM寫(xiě)入自定義字符表的數(shù)據(jù) k+; delay_nms(2); tmp=tmp+8; LCD_dsp_string(1,1,"LCD TEST ");/在第一行第一列顯示"LCD TEST" LCD_dsp_string(1,2,"SUCCESSFUL "
25、);/在第二行第一列顯示"SUCCESSFUL" for (i=0;i<4;i+) LCD_dsp_char( 12+i,1,i);/在第一行第12列位置顯示心圖案的上半部 delay_nms(1); for (i=4;i<8;i+) LCD_dsp_char( 12+i-4,2,i);/在第二行第12列位置顯示心圖案的下半部 delay_nms(1); while (1);/*/3.1 硬件連接 圖3-1所示為簡(jiǎn)易計(jì)算器的電路原理圖。P3口用于鍵盤(pán)輸入,接4*4矩陣鍵盤(pán),鍵值與鍵盤(pán)的對(duì)應(yīng)表如表-所示,p0口和p2口用于顯示,p2口用于顯示
26、數(shù)值的高位,po口用于顯示數(shù)值的低位。圖3-1 簡(jiǎn)易計(jì)算器電路原理圖鍵值與功能對(duì)應(yīng)表鍵值0123456789+-×/=ON/C功能0123456789+-×÷=清零表3-13.2 計(jì)算器的軟件設(shè)計(jì)#include<reg51.h> /頭文件#define uint unsigned int / #define uchar unsigned charsbit lcden=P23; /定義引腳sbit rs=P24;sbit rw=P20;sbit busy=P07;char i,j,temp,num,num_1;long a,b,
27、c; /a,第一個(gè)數(shù) b,第二個(gè)數(shù) c,得數(shù)float a_c,b_c;uchar flag,fuhao;/flag表示是否有符號(hào)鍵按下,fuhao表征按下的是哪個(gè)符號(hào)uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30;void delay(uchar z) / 延遲函數(shù)uchar y;for(z;z>0;z-)
28、 for(y=0;y<110;y+);void check() / 判斷忙或空閑do P0=0xFF; rs=0; /指令 rw=1; /讀 lcden=0; /禁止讀寫(xiě) delay(1); /等待,液晶顯示器處理數(shù)據(jù) lcden=1; &
29、#160; /允許讀寫(xiě) while(busy=1); /判斷是否為空閑,1為忙,0為空閑void write_com(uchar com) / 寫(xiě)指令函數(shù)P0=com; /com指令付給P0口rs=0;rw=0;lcden=0;check();lcden=1;void write_date(uchar date) / 寫(xiě)數(shù)據(jù)函數(shù) P0=date;rs=1;rw=0;lcden=0;check();lcden=1;void init() /初始化
30、60; num=-1;lcden=1; /使能信號(hào)為高電平write_com(0x38); /8位,2行write_com(0x0c); /顯示開(kāi),光標(biāo)關(guān),不閃爍*/write_com(0x06); /增量方式不移位 顯竟獗暌貧 柚?write_com(0x80); /檢測(cè)忙信號(hào)write_com(0x01); /顯示開(kāi),光標(biāo)關(guān),不閃爍num_1=0;i=0;j=0;a=0; /第一個(gè)參與運(yùn)算的數(shù)b=0; /第二個(gè)參與運(yùn)算的數(shù)c=0;flag=0; /flag表示是否有符號(hào)鍵按下, fuhao=0; / fuhao表征
31、按下的是哪個(gè)符號(hào)void keyscan() / 鍵盤(pán)掃描程序P3=0xfe; if(P3!=0xfe) delay(20); 延遲20ms if(P3!=0xfe) temp=P3&0xf0; switch(temp) case 0xe0:num=0; break;
32、0; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3; break; while(P3!=0x
33、fe); if(num=0|num=1|num=2)/如果按下的是'7','8'或'9 if(j!=0) write_com(0x01);
34、; j=0; if(flag=0)/沒(méi)有按過(guò)符號(hào)鍵 a=a*10+tablenum; else/如果按過(guò)符號(hào)鍵 b=b*10+tablenum;
35、 else/如果按下的是'/' flag=1; fuhao=4;/4表示除號(hào)已按 i=table1num; write_date(0x30+i);P3=0xfd;if(P3!=0xfd) delay(5); if(P3!=0xfd) temp=P3&
36、amp;0xf0; switch(temp) case 0xe0:num=4; break; case 0xd0:num=5; break; case 0xb0:num=6;
37、160; break; case 0x70:num=7; break; while(P3!=0xfd); if(num=4|num=5|num=6&&num!=7)/如果按下的是'4','5'或'6'
38、0; if(j!=0) write_com(0x01); j=0; if(fl
39、ag=0)/沒(méi)有按過(guò)符號(hào)鍵 a=a*10+tablenum; else/如果按過(guò)符號(hào)鍵 b=b*10+tablenum; else/如果按下的是'/' flag=1;
40、60; fuhao=3;/3表示乘號(hào)已按 i=table1num; write_date(0x30+i);P3=0xfb;if(P3!=0xfb) delay(5); if(P3!=0xfb) temp=P3&0xf0; switch(temp) case 0xe0:num
41、=8; break; case 0xd0:num=9; break; case 0xb0:num=10; break; case 0x70:num=11; &
42、#160; break; while(P3!=0xfb); if(num=8|num=9|num=10)/如果按下的是'1','2'或'3' if(j!=0) &
43、#160; write_com(0x01); j=0; if(flag=0)/沒(méi)有按過(guò)符號(hào)鍵 a=a*10+tablenum; else
44、/如果按過(guò)符號(hào)鍵 b=b*10+tablenum; else if(num=11)/如果按下的是'-' flag=1; fuhao=2;/2表示減號(hào)已按 i=table1num; write_date(0x30+i);P3=0xf7;i
45、f(P3!=0xf7) delay(5); if(P3!=0xf7) temp=P3&0xf0; switch(temp) case 0xe0:num=12; break; case 0xd0:num=13;
46、0; break; case 0xb0:num=14; break; case 0x70:num=15; break; while(P3!=
47、0xf7); switch(num) case 12:write_com(0x01);a=0;b=0;flag=0;fuhao=0;/按下的是"清零" break; case 13: /按下的是"0"
48、0; if(flag=0)/沒(méi)有按過(guò)符號(hào)鍵 a=a*10; write_date(0x30); P1=0;
49、; else if(flag=1)/如果按過(guò)符號(hào)鍵 b=b*10; write_date(0x30); break;
50、; case 14:j=1; if(fuhao=1)write_com(0x80+0x4f);/按下等于鍵,光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處 write_com(0x04); /設(shè)置從后住前寫(xiě)數(shù)據(jù),每寫(xiě)完一個(gè)數(shù)據(jù),光標(biāo)后退一格 &
51、#160; c=a+b; while(c!=0) write_date(0x30+c%10);
52、 c=c/10; write_date(0x3d); /再寫(xiě)"=" a=0;b=0;flag=0;fuhao=0;
53、60; else if(fuhao=2)write_com(0x80+0x4f);/光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處 write_com(0x04); /設(shè)置從后住前寫(xiě)數(shù)據(jù),每寫(xiě)完一個(gè)數(shù)據(jù),光標(biāo)后退一格(這個(gè)照理說(shuō)順序不對(duì),可顯示和上段一樣)
54、0; if(a-b>0) c=a-b; else c=b-a; &
55、#160; while(c!=0) write_date(0x30+c%10); c=c/10;
56、; if(a-b<0) write_date(0x2d); write_date(0x3d);
57、160; /再寫(xiě)"=" a=0;b=0;flag=0;fuhao=0; else if(fuhao=3)write_com(0x80+0x4f);
58、 write_com(0x04); c=a*b; while(c!=0)
59、 write_date(0x30+c%10); c=c/10;
60、60; write_date(0x3d); a=0;b=0;flag=0;fuhao=0; else if(fuhao=4)write_com(0x80+
61、0x4f); write_com(0x04); i=0; c=(long)(float)a/b)*1000);
62、; while(c!=0) write_date(0x30+c%10); c=c/
63、10; i+; if(i=3) write_date(0x2e);
64、60; if(a/b<=0) write_date(0x30); write_date(0x3d);
65、; a=0;b=0;flag=0;fuhao=0;
66、; break; case 15:write_date(0x30+table1num);flag=1;fuhao=1; break; main()init();while(1) keyscan();第4章 仿真和調(diào)試下面用KEIL uVision與
67、 porteus仿真軟件實(shí)現(xiàn)簡(jiǎn)易計(jì)算器的仿真與調(diào)試。4.1 keil 軟件的介紹單片機(jī)開(kāi)發(fā)中除必要的硬件外,同樣離不開(kāi)軟件,我們寫(xiě)的匯編語(yǔ)言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。機(jī)器匯編是通過(guò)匯編軟件將源程序變?yōu)闄C(jī)器碼,用于MCS-51單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開(kāi)發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語(yǔ)言到逐漸使用高級(jí)語(yǔ)言開(kāi)發(fā),單片機(jī)的開(kāi)發(fā)軟件也在不斷發(fā)展,Keil軟件是目前最流行開(kāi)發(fā)MCS-51系列單片機(jī)的軟件,這從近年來(lái)各仿真機(jī)廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部份組合在一起。運(yùn)行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤(pán)空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對(duì)于使用51系列單片機(jī)的愛(ài)好者來(lái)說(shuō)是十分必要的,如果你使用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代商業(yè)辦公空間的照明藝術(shù)
- 現(xiàn)代辦公設(shè)備與技術(shù)概覽
- 殘障者康復(fù)教育與社區(qū)資源的聯(lián)動(dòng)發(fā)展
- Module3 Unit1 What are they doing?(說(shuō)課稿)-2024-2025學(xué)年外研版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 7 我是班級(jí)值日生(說(shuō)課稿)-2024-2025學(xué)年統(tǒng)編版道德與法治二年級(jí)上冊(cè)
- Unit 3 Its a colourful world!Part B Let's learn(說(shuō)課稿)-2024-2025學(xué)年外研版(三起)(2024)英語(yǔ)三年級(jí)上冊(cè)
- 2023六年級(jí)數(shù)學(xué)上冊(cè) 二 分?jǐn)?shù)乘法第3課時(shí) 分?jǐn)?shù)與整數(shù)相乘說(shuō)課稿 蘇教版
- 5《這些事我來(lái)做》(說(shuō)課稿)-部編版道德與法治四年級(jí)上冊(cè)
- Unit5 My clothes Part A Lets talk (說(shuō)課稿)-2023-2024學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)001
- 《1 有余數(shù)的除法-第二課時(shí)》(說(shuō)課稿)-2023-2024學(xué)年二年級(jí)下冊(cè)數(shù)學(xué)蘇教版001
- 職業(yè)暴露與防護(hù)
- 年產(chǎn)15噸透明質(zhì)酸生產(chǎn)車(chē)間的初步工藝設(shè)計(jì)
- 大模型在航空航天領(lǐng)域的應(yīng)用:智能探索宇宙的無(wú)限可能
- 酒店行業(yè)客源渠道分析
- 2024年中國(guó)陪診服務(wù)行業(yè)市場(chǎng)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告-智研咨詢(xún)重磅發(fā)布
- AVL-CRUISE-2019-整車(chē)經(jīng)濟(jì)性動(dòng)力性分析操作指導(dǎo)書(shū)
- 腸道醫(yī)學(xué)解剖和生理學(xué)
- 人教版九年級(jí)英語(yǔ)動(dòng)詞時(shí)態(tài)專(zhuān)項(xiàng)練習(xí)(含答案和解析)
- 蘭州市規(guī)范醫(yī)療服務(wù)價(jià)格項(xiàng)目基準(zhǔn)價(jià)格表
- 火災(zāi)隱患整改登記表
- 普通地質(zhì)學(xué)教材
評(píng)論
0/150
提交評(píng)論