1、辽宁科技大学单片机考试题库辽宁科技大学单片机考试题库1 第一题 #include sbit P1_0=P10; sbit P1_1=P11; sbit P1_2=P12; sbit P1_3=P13; sbit P1_7=P17; unsigned char ID; void delayms(unsigned char i) unsigned char j; for(i;i0;i-) for(j=1000;j0;j-); void main(void) while(1) if(P1_7=0) delayms(100); if(P1_7=0) ID+; if(ID=4) ID=0; while(
2、P1_7=0); switch(ID) case 0: P1_0=P1_0; P1_1=1;P1_2=1;P1_3=1; delayms(100); break; case 1: P1_1=P1_1; P1_0=1;P1_2=1;P1_3=1; delayms(100); break; case 2: P1_2=P1_2; P1_0=1;P1_1=1;P1_3=1; delayms(100); break; case 3: P1_3=P1_3; P1_0=1;P1_1=1;P1_2=1; delayms(100); break; 2. 串行通信 #include #include #defin
3、e uchar unsigned char uchar code Table18=1,3,7,0x0f,0x1F,0x3F,0x7F,0xff,0xFE, 0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0,0xFF,00; void Delay(unsigned int time); void main() unsigned int i,a; TMOD=0x20; TL1=0xF4; TH1=0xF4; TR1=1; PCON=0x00; SCON=0x50; while(1) for(i=0;i18;i+) SBUF=Tablei; while(TI!=1); /*发送数据完成
4、标志*/ TI=0; /*清除发送标志*/ while(RI!=1); /*接收到数据标志*/ RI=0; /*清除接收标志*/ a=SBUF;/*接收数据*/ P1=a; Delay(200); /*彩灯状态保持一段时间*/ void Delay(unsigned int x) uchar i; while(x-) for(i=0;i125;i+) ; 3.五人表决器 #include sbit RST = P17; sbit K1 = P10; sbit K2 = P11; sbit K3 = P12; sbit K4 = P13; sbit K5 = P14; sbit led= P16
5、; unsigned char count; void delay(unsigned k) unsigned int i,j; for(i=0;ik;i+) for(j=0;j=3) led=led; delay(200); if(RST=0) delay(40); if(RST=0) count=0; P1=0xFF; 4.A/D转换 法一 #include #include #define CS273 XBYTE0xCFA0 #define IN7 XBYTE0xCFAF void Delay(int U); void Display(); unsigned char code table
6、17=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00; unsigned BUF2=0,0; unsigned char k,sn; void main() unsigned char i; IE=0x81;IT0=1; while(1) IN7=i; sn=1; while(sn); Display(); void INT_0(void) interrupt 0 k=IN7;sn=0; void Display() unsigned char i,j; BUF0=k/16
7、; BUF1=k%16; while(j-) CS273=tableBUF0; P1=0xFE; Delay(2); CS273=tableBUF1; P1=0xFD; Delay(2); void Delay(int U) unsigned char i; while(U-) for(i=0;i62;i+) ; A/D 法二 /* * *文件名:sy8.c *版 本:V1.0_C *功 能:AD0809通道0采集数据,并有四个数码管显示 *注 意:实验时,拔掉LED_JUMP跳帽 *创 建:吴文波 * */ #include #include #define AD0809_0 XBYTE0x
8、CFA0 #define CS273 XBYTE0xCFA8 /*分别控制4位数码管的位码*/ sbit P10=P10; sbit P11=P11; sbit P12=P12; sbit P13=P13; /*共阴极数码管显示数据:0-9 A-F 黑屏*/ table17=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00; unsigned char dispbuf4; unsigned char sn; unsigned int idata BUF8; /* * *函数
9、名:INIT0_FUNC *功 能:外部中断0服务函数,实现AD0809通道0数据采集 *输 入:无 *返 回:AD0809通道0数据 * */ void INIT0_FUNC(void) interrupt 0 BUF0=AD0809_0; sn=0; /* * *函数名:Delay *功 能:Delay实现延时约1ms*temp(晶振6M) * for循环执行一次需:(12*(1/6M)*8s *输 入:延时时间 temp *返 回:无 * */ void Delay(unsigned char temp) unsigned int j; while(temp-) for(j=0;j62;
10、j+); /* * *函数名:Display *功 能:进行AD0809通道0数据的显示 *输 入:k-AD0809通道0、BUFk-AD0809通道0数据 *返 回:无 * */ void Display(unsigned char k) unsigned int t,j=10; while(j-) t=(double)BUFk/255*500; /? dispbuf0=t%10; dispbuf1=t/10%10; dispbuf2=t/100%10; dispbuf3=t/1000; P10=0; /*第1位数码管位选通*/ P11=1; P12=1; P13=1; CS273=tabl
11、edispbuf0; /*第1位数码管段码*/ Delay(2); P10=1; P11=0; /*第2位数码管位选通*/ P12=1; P13=1; CS273=tabledispbuf1; /*第2位数码管段码*/ Delay(2); P10=1; P11=1; P12=0; /*第3位数码管位选通*/ P13=1; CS273=tabledispbuf2|0x80; /*第3位数码管段码*/ Delay(2); P10=1; P11=1; P12=1; P13=0; /*第4位数码管位选通*/ CS273=tabledispbuf3; /*第4位数码管段码*/ Delay(2); /*
12、* *函数名:INIT0Init *功 能:外部中断0初始化 *输 入:无 *返 回:无 * */ void INIT0Init() IT0=1; EX0=1; EA=1; /* * *函数名:main主函数 *功 能:实现AD0809采集通道0数据并由4位数码管显示其值 *说 明:无 * */ void main(void) INIT0Init(); /*外部中断0初始化*/ while(1) AD0809_0=0; /*启动通道0采集*/ sn=1; while(sn); Display(0); /*AD0809通道0数据显示*/ 5. 抢答器(加数码管和LED灯) #include #i
13、nclude #define cs273 XBYTE0xCFA0 sbit RST = P17; sbit K1 = P10; sbit K2 = P11; sbit K3 = P12; sbit P1_6=P16; sbit led1=P13; sbit led2=P14; sbit led3=P15; unsigned char code table4=0x06,0x5b,0x4f,0x3f; void delay(unsigned k) unsigned int i,j; for(i=0;ik;i+) for(j=0;j62;j+); main() while(1) start: P1_
14、6=0; if(K1=0) delay(30); if(K1=0) cs273=table0;led1=0;led2=1;led3=1;while(1)if(RST=0)led1=1;led2=1;led3=1;cs273=table3;goto start; else if(K2=0) delay(30); if(K2=0) cs273=table1;led1=1;led2=0;led3=1;while(1)if(RST=0)led1=1;led2=1;led3=1;cs273=table3;goto start; else if(K3=0) delay(30); if(K3=0) cs27
15、3=table2;led1=1;led2=1;led3=0;while(1)if(RST=0)led1=1;led2=1;led3=1;cs273=table3;goto start; 6. 跑马表 #include #include #define CS273 XBYTE0xcfa0 sbit SP1=P17; unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; unsigned char count,keycnt,second; void delay(unsigned char i) un
16、signed j; for(i;i0;i-) for(j=62;j0;j-); void Timer0_INTI() TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; TR0=0; ET0=1; EA=1; void Timer0() interrupt 1 using 0 TH0=(65536-1000)/256; TL0=(65536-1000)%256; count+; if(count=100) second+; if(second=60) second=0; void main(void) Timer0_INTI(); while(1) CS273=tablesecond/10; P1=0xFB;delay(1); CS273=tablesecond%10; P1=0xFD;delay(1); if(SP1=0) delay(5); if(SP1=0) while(SP1=0); keycnt+; switch(keycnt) case 1: TR0=1; break; case 2: TR0=0; break; case 3: keycnt=0; second=0; break;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2