收藏 分销(赏)

东华大学51单片机课程设计硬件实验答案大全6题.docx

上传人:精*** 文档编号:4520494 上传时间:2024-09-26 格式:DOCX 页数:18 大小:39.73KB 下载积分:8 金币
下载 相关 举报
东华大学51单片机课程设计硬件实验答案大全6题.docx_第1页
第1页 / 共18页
东华大学51单片机课程设计硬件实验答案大全6题.docx_第2页
第2页 / 共18页


点击查看更多>>
资源描述
东华大学51单片机课程设计硬件实验答案大全6题 东华学子加油 from你们的老学长 说明:哈哈哈哈哈哈,学长造福学弟学妹们啦。有这个在手,还怕51硬件实验吗?哈哈哈哈哈哈(都能直接运行的,下载了别忘记给5分,或者跟我说声:好人一生平安) 实验2 #include <reg51.h> void delay(void)//延时函数 { unsigned int i; for(i=0;i<100;i++); } void main(void) { unsigned char num,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; case 3: if(i<100) P1 = 0x00; else P1 = 0xff;//四个灯闪烁 break; } delay(); i++; if(i>200) i = 0; } } 实验3 #include <reg51.h> #include <absacc.h> #define Out_port XBYTE[0xcfa0] void delay(unsigned int time) { char i; for(;time>0;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次 { led_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); i=0; while(i<5)//南北方向黄灯闪烁 { led_out(0x01); delay(1000); led_out(0x41); delay(1000); i++; } /*led_out(0x03); delay(1000);*/ } } 实验5 #include <reg51.h> #include <absacc.h> #define Out_port XBYTE[0xcfb0] void delay(unsigned int 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(0x00); 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_out(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); } } 实验六 注意更改为“。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是偏移量,即从基址寄存器到表首的距离 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计数计完一个周期,重置初值 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,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 ;开始计数 RETI ;中断返回 END 实验11 #include <reg51.h> #include <absacc.h> #define Led_dat XBYTE[0xcfe8] #define Led_ctl XBYTE[0xcfe9] char g; 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|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; 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(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; …… case 常量表达式n: 语句n; break; default: 语句n+1; break; } */ 实验15 #include <reg51.h> #include <absacc.h> #define Led_dat XBYTE[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|0x80; 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&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<ad_port&&ad_port<0xf0) P1=0xff; Display_byte(0,ad_port); delay(10000); ad_port = 0; } 18
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服