西南科技大學(xué)單片機(jī)上機(jī)考試題答案.doc_第1頁
西南科技大學(xué)單片機(jī)上機(jī)考試題答案.doc_第2頁
西南科技大學(xué)單片機(jī)上機(jī)考試題答案.doc_第3頁
西南科技大學(xué)單片機(jī)上機(jī)考試題答案.doc_第4頁
西南科技大學(xué)單片機(jī)上機(jī)考試題答案.doc_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

/* * file 識別最大模擬輸入通道 * author 秘密作戰(zhàn)實(shí)驗(yàn)室(FREES) * version v1.0 * date 2015-06-26 * 功 能:利用0809采集兩路模擬電壓, 將電壓值最大的通道號顯示在LED顯示器上。(硬件電路參見AD_CH2_1.DSN)。 * */#include /51單片機(jī)頭文件#include /宏定義#defineTIMER1DEF( 65536 - 50000 ) /定時時間#defineAD_Convert(i)(*(unsigned char volatile xdata *) (0x3c00 + i) = 0) /返回片外地址#defineAD_Read(i)(*(unsigned char volatile xdata *) (0x3c00 + i) /全局變量定義int Flag=0;intbAD_Val_2 = 0;/ AD通道2轉(zhuǎn)換結(jié)果intbAD_Val_7 = 0;/ AD通道7轉(zhuǎn)換結(jié)果int table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /共陽數(shù)碼管0-9 /* 函數(shù)名稱:delay(n)* 功 能:程序延時n ms* 入口參數(shù):無* 出口參數(shù):無*/void delay(int n)/int i=0,j=0;for(i=n;i0;i-)for(j=114;j0;j-); /* 函數(shù)名稱:TimeT1()* 功 能:定時器1初始化 50ms定時* 入口參數(shù):無 * 出口參數(shù):無*/void TimeT1() TMOD=0X10; /定時器1 方式1TH1=TIMER1DEF/256;/裝定時初值高8位,定時50ms 計(jì)算公式 高位us=(65535-50000)/256TL1=TIMER1DEF%256;/裝定時初值低8位,定時50ms 計(jì)算公式 低位us=(65535-50000)%256PT1=1; /定時器1 中斷優(yōu)先級 高ET1=1; /定時器1 中斷控制位 TR1=1; /定時器1 啟動控制位/* 函數(shù)名稱:main()* 功 能:程序入口* 入口參數(shù):無* 出口參數(shù):無*/void main(void)/-加油/ 初始化P1=0Xff;/外部中斷初始化IT1=1; /脈沖觸發(fā)方式1:負(fù)跳變沿有效0:EX1=1; /外部中斷1中斷控制位TimeT1(); /定時器1初始化EA = 1; / 開中斷delay(500);while( 1 ) / 主循環(huán) delay(50); if(bAD_Val_2=bAD_Val_7) P1=table2; if(bAD_Val_7bAD_Val_2) P1=table7;/* 函數(shù)名稱:INT_INT1()* 功 能:INT1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_INT1(void)interrupt 2 using 1if(Flag=1) bAD_Val_2=AD_Read(2);if(Flag=2) bAD_Val_7=AD_Read(7);/* 函數(shù)名稱:INT_T1()* 功 能:T1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_T1() interrupt 3 using 1static intbCount = 3 ; -bCount; TH1=TIMER1DEF/256; TL1=TIMER1DEF%256;if( bCount = 2)Flag=1;AD_Convert(2);if(bCount=1)Flag=2;AD_Convert(7);if(bCount=0) bCount=4;/* * file 按鍵掃描 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能:利用8255的PC口實(shí)現(xiàn)3X3鍵盤掃描(硬件電路參見3X3KEY_8255.DSN)。 當(dāng)18號鍵獨(dú)立按下時,連接在PA口對應(yīng)的LEDx點(diǎn)亮(即1號鍵按下時LDE1亮,2號鍵按下時LDE2亮), 當(dāng)9號鍵按下時,所有LED點(diǎn)亮,當(dāng)沒有鍵按下時,所有LED熄滅。*/#includereg52.h#includeabsacc.h /Direct access to 8051sbit CS=P27; /片選段 #define PA XBYTE0x0000/定義端口A地址#define PB XBYTE0x0400/定義端口B地址#define PC XBYTE0x0800/定義端口C地址#define CN XBYTE0xC000/定義控制口地址unsigned char Key_Scanf(void)/按鍵掃描函數(shù)unsigned char key=0;PC=0xFB;/把PC2置0,PC1和PC0置1第一列if(PC=0xDB)key=1;if(PC=0xBB)key=4;if(PC=0x7B)key=7;PC=0xFD;/把PC1置0,PC2和PC0置1第二列if(PC=0xDD)key=2;if(PC=0xBD)key=5;if(PC=0x7D)key=8;PC=0xFE;/把PC0置0,PC2和PC1置1第三列if(PC=0xDE)key=3;if(PC=0xBE)key=6;if(PC=0x7E)key=9;return(key);void main(void) /給我最親愛的女盆友 unsigned int a=0xff; CS=0;CN=0x88;/8255初始化,寫控制字while(1)switch(Key_Scanf()case 0:PA=0xff;break; case 1:PA=0xfe;break;case 2:PA=0xfd;break; case 3:PA=0xfb;break;case 4:PA=0xf7;break;case 5:PA=0xef;break;case 6:PA=0xdf;break;case 7:PA=0xbf;break;case 8:PA=0x7f;break;case 9:PA=0x00;break;default:break; /* * file 50Hz鋸齒波 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 (Frees) * version v1.0 * date 2015-06-26 * 功 能:利用0832同步輸出兩個頻率為50赫茲的鋸齒波(硬件電路參見DA_BUF2_1.DSN)。*/#includereg52.h#includeabsacc.h#define DA_1 XBYTE0x2000/設(shè)置DAC08321的選通地址#define DA_2 XBYTE0x2400/設(shè)置DAC08322的選通地址#define DA_S XBYTE0x3c00/設(shè)置DAC0832的選通地址unsigned int DAVAL=0;void delay(unsigned int time)unsigned int i=0,j=0;for(i=0;itime;i+)for(j=0;j=255)DAVAL=0;/* * file Pwm發(fā)生器 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能:在硬件電路PWM.DSN中實(shí)現(xiàn)P1.7輸出PWM波。周期T=100ms,初始占空比(T1/T)為50%, 按鍵KEY1每次增加占空比10%(直到90%),KEY2每次減小占空比10%(直到10%)。 */#includereg52.hsbit Key0=P10;/P10sbit Key1=P11;/P11sbit PWM=P17;unsigned char num=0,Duty=5;void Delay(unsigned int time)unsigned int i=0,j=0;for(i=0;itime;i+)for(j=0;j1?Duty:1;Duty=Duty9?Duty:9;void Timer0_Inits(void)TMOD|=0x01;TH0=(65535-10000)/256;TL0=(65535-10000)%256;TR0=1;ET0=1;EA=1;void main(void)Timer0_Inits();while(1)Key_Scanf();void PIT0(void) interrupt 1TH0=(65535-10000)/256;TL0=(65535-10000)%256;+num;if(num9)num=0;/* * file 編碼顯示器 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能: 利用8255擴(kuò)展并行端口(硬件電路參見CodeDisplay_8255.DSN)。 當(dāng)KEY按下時,利用8255的PC口輸入二進(jìn)制值編碼(6位), 將該值轉(zhuǎn)換成十進(jìn)制后顯示在2位7段LED顯示器上。 */#includereg52.h#includeabsacc.hsbit CS=P27; #define PA XBYTE0x0000#define PB XBYTE0x0400#define PC XBYTE0x0800#define CN XBYTE0xC000unsigned table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char number=0;void display(unsigned char num)/PA=0xff;PA=tablenum/10;/PB=0xff;PB=tablenum%10;void main(void) CS=0;CN=0x89; /8255初始化,寫控制字while(1)number=PC&0x3f;display(number);/* * file 步進(jìn)電機(jī) * author 秘密作戰(zhàn)實(shí)驗(yàn)室(FREE) * version v1.0 * date 2015-06-26 * 功 能: 在SMSpeed.DSN的電路上實(shí)現(xiàn):當(dāng)KEY2按下時,電機(jī)停止轉(zhuǎn)動,釋放時繼續(xù)轉(zhuǎn)動。 當(dāng)KEY1按下時,電機(jī)以60轉(zhuǎn)/min的轉(zhuǎn)速正轉(zhuǎn),釋放時以120轉(zhuǎn)/min的轉(zhuǎn)速反轉(zhuǎn)。 */#includereg52.hsbit Key1=P33;char num=0;unsigned int Speed=50000;/25000對應(yīng)120r/min,50000對應(yīng)60r/minchar dir=1; /電機(jī)旋轉(zhuǎn)方向定義void delay(unsigned int time) unsigned int i,j; for(i=0;itime;i+) for(j=0;j=4)num=0;if(num0)num=3;moto(num);/* * file 步進(jìn)輸出模擬電壓 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能:利用0832在按鍵控制下步進(jìn)輸出模擬電壓(硬件電路參見DA_BUF1_1.DSN)。要求每 按鍵一次遞增或遞減0.1V。設(shè)輸出最大值為4V,最小值為1V。 */#includereg52.h#includeabsacc.hsbit Key2=P16;sbit Key1=P17;#define DA_S XBYTE0x3c00unsigned char DAVAL=128;void delay(unsigned int time)unsigned int i=0,j=0;for(i=0;itime;i+)for(j=0;j200?200:DAVAL;/三目運(yùn)算符,對DAVAL進(jìn)行限幅DAVAL=DAVAL50?50:DAVAL;signal(DAVAL);/* * file 單個模擬電壓等級識別 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能: 利用0809采集單路模擬電壓,將其分級(10級),并將分級數(shù)(09)顯示在LED 顯示器上。(硬件電路參見AD_CH1_1.DSN)。 */#include /宏定義#defineTIMER1DEF( 65536 - 50000 )#defineAD_Convert(i)(*(unsigned char volatile xdata *) (0x3c00 + i) = 0)#defineAD_Read(i)(*(unsigned char volatile xdata *) (0x3c00 + i) /全局變量定義intbAD_Val = 0;/ 轉(zhuǎn)換結(jié)果unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/* 函數(shù)名稱:delay()* 功 能:延時n毫秒* 入口參數(shù):無* 出口參數(shù):無*/void delay(int time)int i=0,j=0; for(i=time;i0;i-)for(j=114;j0;j-);/* 函數(shù)名稱:TimeT1()* 功 能:定時器1初始化,定時50ms* 入口參數(shù):無* 出口參數(shù):無*/void TimeT1() TMOD=0X10; /定時器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%256; PT1=1;/定時器1 中斷優(yōu)先級 高 ET1=1;/定時器1 中斷控制位 TR1=1;/* 函數(shù)名稱:main()* 功 能:程序入口* 入口參數(shù):無* 出口參數(shù):無*/void main(void)P1=0Xff; / 初始化TimeT1();IT1=1; /脈沖觸發(fā)方式EX1=1;EA =1; / 開中斷delay(500);while( 1 )/ 主循環(huán) delay(50); P1=table10*bAD_Val/256;/* 函數(shù)名稱:INT_INT1()* 功 能:INT1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_INT1(void)interrupt 2 using 1 bAD_Val=AD_Read(4);/* 函數(shù)名稱:INT_T1()* 功 能:T1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_T1() interrupt 3 using 1staticintbCount = 2; TH1=TIMER1DEF/256; TL1=TIMER1DEF%256;if( -bCount = 0)/ 判斷100毫秒時間到 bCount=2; AD_Convert(4);/* * file 單個模擬電壓監(jiān)測 * author 秘密作戰(zhàn)實(shí)驗(yàn)室 * version v1.0 * date 2015-06-26 * 功 能: 在VoltageMonitor_1.DSN的電路中測量由電位器產(chǎn)生的模擬電壓,當(dāng)電壓小于1V時, 使連接在P1.0上的(黃)色LED亮;當(dāng)電壓大于4V時,使連接在P1.1上的(紅)色 LED亮當(dāng)電壓在14V時,所有LED熄滅。 要求:當(dāng)信號變化后,必須在100毫秒內(nèi)做出響應(yīng)。 */#include /宏定義#defineTIMER1DEF( 65536 - 50000 )#defineAD_Convert(i)(*(unsigned char volatile xdata *) (0x2000 + i) = 0)#defineAD_Read(i)(*(unsigned char volatile xdata *) (0x2000 +i)/全局變量定義intbAD_Val = 0;/ 轉(zhuǎn)換結(jié)果sbit P1_0=P10;sbit P1_1=P11;/* 函數(shù)名稱:delay()* 功 能:延時n毫秒* 入口參數(shù):無* 出口參數(shù):無*/void delay(int time) int i,j; for(i=0;itime;i+) for(j=0;j114;j+);/* 函數(shù)名稱:TimeT1()* 功 能:定時器1初始化,定時50ms* 入口參數(shù):無* 出口參數(shù):無*/void TimeT1() TMOD=0X10; /定時器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%256; PT1=1;/定時器1 中斷優(yōu)先級 高 ET1=1;/定時器1 中斷控制位 TR1=1;/* 函數(shù)名稱:main()* 功 能:程序入口* 入口參數(shù):無* 出口參數(shù):無*/void main(void)P1=0xcf;/ 初始化IT1=1;/脈沖觸發(fā)方式EX1=1;TimeT1();EA = 1;/ 開中斷delay(500);while( 1 ) / 主循環(huán) if(bAD_Val=204) P1_1=0; if(bAD_Val51&bAD_Val204)P1_0=1;P1_1=1;/* 函數(shù)名稱:INT_INT1()* 功 能:INT1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_INT1(void)interrupt 2 using 1 bAD_Val=AD_Read(6); / 此處添加讀和保存AD轉(zhuǎn)換結(jié)果的語句(結(jié)果保存到bAD_Val)/* 函數(shù)名稱:INT_T1()* 功 能:T1中斷服務(wù)程序,使用工作寄存器組1* 入口參數(shù):無* 出口參數(shù):無*/voidINT_T1() interrupt 3 using 1staticintbCount = 2;/ 秒計(jì)數(shù) TH1=TIMER1DEF/256;/ 重置定時常數(shù)的語句TL1=TIMER1DEF%256;if( -bCount = 0) / 判斷100毫秒時間到 bCount=2; /重置秒計(jì)數(shù)的語句 AD_Convert(6);/啟動AD轉(zhuǎn)換的語句 /* * file 漢字顯示 * author 秘密作戰(zhàn)實(shí)驗(yàn)室(FREE) * version v1.0 * date 2015-06-26 * 功 能:在8X8的LED點(diǎn)陣顯示器上顯示漢字“大”(硬件電路參見Displayer_dot.DSN)。 */#includereg52.hunsigned char Line=0x10,0x10,0xff,0x10,0x28,0x24,0x42,0x81;unsigned char Row=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;void delay(unsigned int time) unsigned int i,j; for(i=0;itime;i+) for(j=0;j114;j+);void SendData(unsigned char dat) SBUF = dat; while(!TI); TI = 0; void SendString(unsigned char *s) while(*s!=0)/ 0 表示字符串結(jié)束標(biāo)志,通過檢測是否字符串末尾 SendData(*s+); void display(void)unsigned char i=0;for(i=0;i8;i+)SendData(Linei);P1=Rowi;delay(70);void main(void)SCON=0x00;P1=0x00;/關(guān)閉顯示while(1) display();/* 文件名:兩個模擬信號差超限時報(bào)警* 功 能:利用0809采集兩路模擬電壓,當(dāng)兩電壓值相差超過1V時,藍(lán)色LED亮, 此時若低通道號的電壓值大,紅色LED亮;若高通道號的電壓值大,則黃色LED亮。 (硬件電路參見AD_CH2_2.DSN)。 */#include /宏定義#defineTIMER1DEF( 65536 - 50000 )#defineAD_Convert(i)(*(unsigned char volatile xdata *) (0x3c00 + i) = 0)#defineAD_Read(i)(*(unsigned char volatile xdata *) (0x3c00 +i)/全局變量定義unsigned intbAD_Val_1=0; / 轉(zhuǎn)換結(jié)果unsigned intbAD_Val_5=0;unsigned int flag=0;sbit P1_0=P10;sbit P1_3=P13;sbit P1_5=P15;/* 函數(shù)名稱:delay()* 功 能:延時n毫秒* 入口參數(shù):無* 出口參數(shù):無*/void delay(int time) int i,j; for(i=0;itime;i+) for(j=0;j51) P1_0=0; P1_3=0; elseif(bAD_Val_5-bAD_Val_1)51) P1_0=0; P1_5=0; else P1=0xff;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論