《单片机教学实验内容答案.doc》由会员分享,可在线阅读,更多相关《单片机教学实验内容答案.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- -1.数据传送实验要求: 将片从30H开场连续7个单元的容送入从40H开场的地址单元中。先在30H36H中送初值#includevoid main()unsigned char data i,*d1,*d2;d1=0x30;d2=0x40;*d1=0x10;*(d1+1)=0x11;*(d1+2)=0x22;*(d1+3)=0x45;*(d1+4)=0x30;*(d1+5)=0x32;*(d1+6)=0x21;for(i=0;i7;i+)*(d2+i)=*(d1+i);2.排序实验要求:将片从30H单元开场的10个无符号数,按由小到大的顺序排列。先在30H39H中送排序初值#include
2、void main()unsigned char data *p,i,j,d;p=0x30;*(p+0)=0x21;*(p+1)=0x11;*(p+2)=0x31;*(p+3)=0x02;*(p+4)=0x22;*(p+5)=0x42;*(p+6)=0x32;*(p+7)=0x41;*(p+8)=0x05;*(p+9)=0x22;for(i=0;i9;i+)for(j=0;j*(p+j+1)d=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=d ;- word.zl- -3.并行接口实验要求:使用P1口控制LED1LED8进展把戏显示。显示顺序规律为:18个LED依次左移单个点
3、亮。28个LED依次左移逐个点亮。38个LED依次左移逐个熄灭,然后再从1进展循环,中间延迟时间1s。#include#define uchar unsigned char /在程序中用uchar替代unsigned char /目的在于减少代码输入量#define uint unsigned intvoid delay(uint); /定义延时函数void LeftMovLED(void); /定义向左移运点亮LED的函数/*主函数*void main(void) while(1) /死循环 LeftMovLED(); /调用LeftMovLED实现左移点亮LED功能 void LeftMo
4、vLED(void) uchar i,temp; /定义两个变量 temp=0x01; /temp赋初值 for(i=0;i8;i+) /下面的代码循环8次 P1=temp; /将temp的值赋给PORTD点亮LED temp=temp1&0xfe; /将temp左移一位后将最后一位清零。 delay(1000); /调用延时函数,延时时间大约1S temp=0x01; /temp赋初值 for(i=0;i8;i+) /下面的代码循环8次 P1=temp; /将temp的值赋给PORTD点亮LED temp=temp1&0xfe; /将temp左移一位后将最后一位清零。 temp+; dela
5、y(1000); /调用延时函数,延时时间大约1S for(i=0;i8;i+) /下面的代码循环8次 P1=temp; /将temp的值赋给PORTD点亮LED temp=temp1&0xfe; /将temp左移一位后将最后一位清零。 delay(1000); /调用延时函数,延时时间大约1S /*延时函数*void delay(uint x) uchar i; /定义一个循环变量 while(x-) /循环执行在下代码x次,x在呼叫此函数处赋值。 for(i=0;i165;i+) /循环执行以下代码165次大约1ms continue;- word.zl- -4.定时器/计数器实验要求:使
6、用定时/计数器作为延时控制,在两灯P0.0和P0.1之间按1s互相闪烁。#include #define uchar unsigned charsbit LED=P00; sbit LED1=P01;uchar time;void InitTimer0(void) LED=1;LED1=0; TMOD = 0x01; /定时器0,工作方式1 TH0 = 0x3c; TL0 = 0xb0; /50ms中断一次 EA = 1; ET0 = 1; TR0 = 1;void main(void) InitTimer0(); while(1); / 分号,表示在此一直循环执行,等待中断。相当于汇编的 A
7、JMP $void Timer0Interrupt(void) interrupt 1 TH0 = 0x3c; TL0 = 0xb0; time+; if(time=20) /中断20次,1s time=0; LED=!LED; /P1.0上的LED1s亮灭一次 LED1=!LED1; - word.zl- -6.LED显示器要求:设计一个59秒计时器,使用两位共阳极LED数码管将其显示出来。实验电路图要求自己设计,可参考书上例子或上网查询。#include#define uchar unsigned char#define uint unsigned int unsigned char co
8、de table = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,; void delay (uint xms)/延时函数 uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-);void main() uchar key,a;a=0;while(a5)key=0;while(key10) delay(1000); switch(key) case 0:P2=table0;break;/0 按下相应的键显示相对应的码值 case 1:P2=table1;break;/1 case 2:P2=ta
9、ble2;break;/2 case 3:P2=table3;break;/3 case 4:P2=table4;break;/4 case 5:P2=table5;break;/5 case 6:P2=table6;break;/6 case 7:P2=table7;break;/7 case 8:P2=table8;break;/8 case 9:P2=table9;break;/9 switch(a) case 0:P1=table0;break;/0 按下相应的键显示相对应的码值 case 1:P1=table1;break;/1 case 2:P1=table2;break;/2 case 3:P1=table3;break;/3 case 4:P1=table4;break;/4 case 5:P1=table5;break;/5 if(key=9) a+; key+; - word.zl