1、
东华大学51单片机课程设计硬件实验答案大全6题
东华学子加油 from你们的老学长
说明:哈哈哈哈哈哈,学长造福学弟学妹们啦。有这个在手,还怕51硬件实验吗?哈哈哈哈哈哈(都能直接运行的,下载了别忘记给5分,或者跟我说声:好人一生平安)
实验2
#include
2、um,i=0; while(1) { P1 = 0xff; num = P1&3; switch (num) { case 0: P1 = 0xff; break;//灯全灭 case 1: if(i<100) P1 = 0xf3; else P1 = 0xff; break;//两个灯闪烁 case 2: if(i<100) P1 = 0xcf; else P1 = 0xff;//两个灯闪烁 break; c
3、ase 3:
if(i<100) P1 = 0x00;
else P1 = 0xff;//四个灯闪烁
break;
}
delay();
i++;
if(i>200) i = 0;
}
}
实验3
#include
4、time--) for(i=0;i<5;i++); } void led_out(unsigned char dat) { Out_port = ~dat; } void main(void) { char i=0; led_out(0x11);//两个路口的红灯全亮 delay(30000); while(1) { led_out(0x12);//东西路口的绿灯亮,南北路口的红灯亮 delay(30000); while(i<5)//东西方向黄灯闪烁5次 { l
5、ed_out(0x10); delay(1000); led_out(0x14); delay(1000); i++; } i=0; while(i<10)//****将黄灯闪烁10 { led_out(0x00); delay(1000); led_out(0x44); delay(1000); i++; } led_out(0x21);//东西路口红灯亮,而同时南北路口的绿灯亮 delay(30000);
6、 i=0;
while(i<5)//南北方向黄灯闪烁
{
led_out(0x01);
delay(1000);
led_out(0x41);
delay(1000);
i++;
}
/*led_out(0x03);
delay(1000);*/
}
}
实验5
#include
7、nt time) { char i; for(;time>0;time--) for(i=0;i<5;i++); } void led_out(unsigned char dat) { Out_port = ~dat; } void urgent(void) interrupt 0//***将闪烁时间改为10秒 { unsigned int i; EA = 0;//现在不允许中断 while(i<25) { led_out(0x11); delay(1000); led_out(0x
8、00); delay(1000); i++; } i=0; EA = 1; } void main(void) { char i=0; IT0 = 1; EX0 = 1; EA = 1; led_out(0x11); delay(30000); while(1) { led_out(0x12); delay(30000); while(i<5) { led_out(0x10); delay(1000); led_ou
9、t(0x14); delay(1000); i++; } led_out(0x11); delay(1000); led_out(0x21); delay(30000); i=0; while(i<5) { led_out(0x01); delay(1000); led_out(0x41); delay(1000); i++; } led_out(0x03); delay(1000); } }
10、 实验六 注意更改为“。Asm“文件不要用。C文件编译 NAME T6 ;定时器实验 CSEG AT 0000H LJMP START CSEG AT 001BH ;定时器/计数器1中断程序入口地址 LJMP INT CSEG AT 4100H START: MOV A,#01H ;首显示码 CPL A MOV R1,#03H ;03是偏移量,即从基址寄存器到表首的距离
11、 MOV R0,#05H ;05是计数值 MOV TMOD,#10H ;计数器置为方式1 MOV TL1,#0AFH ;装入时间常数 MOV TH1,#03CH ORL IE,#88H ;CPU中断开放标志位和定时器 ;1溢出中断允许位均置位 SETB TR1 ;开始计数 LOOP1: CJNE R0,#00,DISP MOV R0,#05H ;R0计数计完一
12、个周期,重置初值 INC R1 ;表地址偏移量加1 CJNE R1,#21H,LOOP2 MOV R1,#03H ;如到表尾,则重置偏移量初值 LOOP2: MOV A,R1 ;从表中取显示码入累加器 MOVC A,@A+PC CPL A JMP DISP DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH DB 0FEH,0FCH,0F8H,0F0H,
13、0E0H,0C0H,80H,00H DB 03H,0FH,3FH,0FFH,0FCH,0F0H,0C0H,00H DISP: MOV P1,A ;将取得的显示码从P1口输出显示 JMP LOOP1 INT: CLR TR1 ;停止计数 DEC R0 ;计数值减一 MOV TL1,#0AFH ;重置时间常数初值 MOV TH1,#03CH SETB TR1 ;开始计数
14、 RETI ;中断返回
END
实验11
#include
15、0x77,0x7c,0x39,0x5e,0x79,0x71}; loc &=0xf; Led_ctl = loc|0x80; Led_dat = table[0]; /*显示高4位*/ loc++; Led_ctl = loc|0x80; g=dat&0xf ; if(g==6) g=4; if(g==7) g=5; if(g==8) g=6; if(g==9) g=7; if(g==0xc) g=8; if(g==0xd) g=9;
16、 Led_dat = table[g]; /*显示低4位 */ } void main(void) { Led_ctl = 0xd1; while((Led_ctl&0x80)==0x80); Led_ctl = 0x31; while(1) { if((Led_ctl&0xf)==0) continue; Led_ctl = 0x40; Display_byte(0,Led_dat); } } /*switch(表达式) {
17、 case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
……
case 常量表达式n:
语句n;
break;
default:
语句n+1;
break;
}
*/
实验15
#include
18、E[0xcfe8] #define Led_ctl XBYTE[0xcfe9] #define ad_port XBYTE[0xcfa0] void Display_byte(unsigned char loc,unsigned char dat) //中断结果处理后显示在数码管上 { unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; loc &=0xf; Led_ctl = loc|0x
19、80; Led_dat = table[dat>>4]; /*显示高4位*/ loc++; Led_ctl = loc|0x80; Led_dat = table[dat&0xf]; /*显示低4位*/ } void delay(unsigned int t) { for(;t>0;t--); } void main(void) { /*中断*/ EA=1; IT0=1; EX0=1;//初始化设置中断 /*中断*/ Led_ctl = 0xd1; while((Led_ctl
20、0x80)==0x80);//?????
Led_ctl = 0x31;
/* while(1)
{
ad_port = 0;
while(INT0);
while(!INT0);//??????
Display_byte(0,ad_port);
delay(10000);
}*/
ad_port = 0;
while(1); //让程序停在这儿等待中断
}
void vb() interrupt 0 //中断函数当数值转化完成后将数值显示出来
{
if(ad_port>0xf0)
P1=0xfe;
if(ad_port<0x10)
P1=0xfd;
if(0x10






