单片机试题库程序及答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、程序功能:通过用DAC0832产生三角波。(DAC0832的数字信号输入端接P0口,/CS接P2.7,/XFER接地,/WR1、/WR2接单片机的/WR,ILE接电源+5V。)①DA0832=i;②for(i=255;i=0;i--)③for(i=0;i=255;i++)④while(1)⑤uchari;⑥TF1=0;⑦while(!TF1);⑧TR1=1;⑨voiddelay_1ms()⑩#includereg51.h#includeabsacc.h//存放绝对地址宏定义的函数原型#includereg51.h﹍﹍﹍﹍﹍#defineucharunsignedchar#defineuintunsignedint#defineDA0832XBYTE[0X7FFF]﹍voiddelay_1ms()﹍﹍﹍﹍﹍{TH1=0XFC;TL1=0X18;TR1=1;﹍﹍while(!TF1);﹍﹍﹍﹍//等待1ms定时时间到﹍﹍﹍TF1=0;﹍﹍﹍}voidmain(){﹍uchari;﹍﹍﹍﹍﹍TMOD=0X10;﹍﹍﹍while(1)﹍﹍﹍{﹍﹍for(i=0;i=255;i++)﹍﹍﹍﹍//形成三角波输出值,逐渐增大,最大为255{DA0832=i;//D/A转换输出delay_1ms();}﹍﹍for(i=255;i=0;i--)﹍﹍﹍﹍{﹍DA0832=i;﹍﹍﹍﹍﹍;//D/A转换输出delay_1ms();}}}2、程序功能:通过DAC0832产生锯齿波。(DAC0832的数字信号输入端接P0口,/CS接P2.7,/XFER接地,/WR1、/WR2接单片机的/WR,ILE接电源+5V。)选择项:①delay_1ms();②DA0832=i;③for(i=0;i=255;i++)④TMOD=0X10;⑤voidmain()⑥TF1=0;⑦while(!TF1);⑧TL1=0X18;⑨#defineDA0832XBYTE[0X7FFF]⑩#includeabsacc.h源程序:﹍#includeabsacc.h﹍﹍﹍﹍﹍//存放绝对地址宏定义的函数原型#includereg51.h#defineucharunsignedchar#defineuintunsignedint#defineDA0832XBYTE[0X7FFF]﹍﹍﹍﹍﹍﹍voiddelay_1ms(){TH1=0XFC;TL1=0X18;﹍﹍﹍﹍TR1=1;﹍while(!TF1);﹍﹍﹍﹍﹍﹍TF1=0;﹍﹍﹍﹍﹍}voidmain()﹍﹍﹍﹍﹍﹍{uchari;﹍TMOD=0X10;﹍﹍﹍﹍﹍while(1){for(i=0;i=255;i++)﹍﹍﹍﹍﹍﹍{﹍﹍DA0832=i;﹍﹍﹍﹍//D/A转换输出﹍delay_1ms();﹍﹍﹍﹍﹍}}}3、程序功能:用单片机实现简易数字钟,显示小时、分和秒。(单片机P2口输出取反后控制8个共阴极数码管的位码,P0口控制每个数码管的段码)选择项:①calc();②display();③if(time[2]23)④if(time[1]59)⑤if(time[0]59)⑥P0=dispcode[time[i]/10];⑦P0=dispcode[time[i]%10];⑧for(i=0;i4;i++)⑨voiddelay(void)⑩uchartime[4]={23,59,58,0};源程序:#includereg51.h//头文件#defineucharunsignedchar//宏定义uchardispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//定义共阴数码管0~9显示码数组﹍uchartime[4]={23,59,58,0};﹍﹍﹍﹍﹍//设置时间初值voiddelay(void)//延时函数{uchark;for(k=250;k0;k--);}voiddisplay(void)//显示函数{uchari,k;k=0x01;//设置位选线初值﹍for(i=0;i4;i++)﹍﹍﹍﹍﹍//循环4次{P2=0;//关闭显示﹍P0=dispcode[time[i]%10];﹍﹍﹍﹍﹍//输出个位数的段码P2=k;//送位码k=k1;//位码左移一位delay();//调用延时函数P2=0;//关闭显示﹍P0=dispcode[time[i]/10];﹍﹍﹍﹍﹍//输出十位数的段码P2=k;//送位码k=k1;//位码左移一位delay();//调用延时函数}P2=0;//关闭显示}voidcalc(void)//时间值计算函数{time[0]++;//秒加1﹍if(time[0]59)﹍﹍﹍﹍﹍//秒是否超过59{time[0]=0;//秒清0time[1]++;//分加1﹍if(time[1]59)﹍﹍﹍﹍﹍//分是否超过59{time[1]=0;//分清0time[2]++;//小时加1﹍if(time[2]23)﹍﹍﹍﹍﹍//小时是否超过23time[2]=0;//小时清0}}}﹍﹍﹍voidmain()﹍﹍﹍//主函数{uchari;while(1)//无限循环{for(i=0;i250;i++)//循环250次﹍﹍display();﹍﹍﹍﹍//调用显示函数﹍﹍calc();﹍﹍﹍﹍//调用时间计算函数}}4、程序功能:用单片机控制蜂鸣器播放一首简单的曲子。利用定时器T1实现声音频率的产生(P1.3引脚接蜂鸣器)。选择项:①unsignedintcodetable[3]={64260,64400,64524};②th=(table[n]/256);③unsignedchari,j,k;④for(i=0;im;i++)⑤unsignedchari;⑥ET1=1;⑦EA=1;⑧TR1=1;⑨delay(5);⑩TH1=th;源程序:#includereg51.h//头文件sbitP1_3=P1^3;//定义蜂鸣器输出引脚﹍unsignedintcodetable[3]={64260,64400,64524};﹍﹍﹍//1、2、3三个音的计数值unsignedcharth,tl;//定义全局变量voidsing(unsignedcharn)//音频读取函数{﹍﹍th=(table[n]/256);﹍﹍﹍﹍//读取音调计数值高位tl=(table[n]%256);//读取音调计数值低位}voiddelay(unsignedcharm)//延时函数{﹍﹍unsignedchari,j,k;﹍﹍﹍﹍﹍﹍for(i=0;im;i++)﹍﹍﹍for(j=0;j200;j++)for(k=0;k100;k++);}main()//主函数{﹍﹍﹍﹍﹍﹍TMOD=0X10;//定时器工作方式设置﹍﹍﹍ET1=1;﹍﹍﹍//T1中断允许设置﹍﹍EA=1;﹍﹍﹍﹍//中断总允许设置﹍﹍TR1=1;﹍﹍﹍﹍//启动T1i=0;//设置音频初始值while(1)//无限循环{sing(i);//调用音频输出函数﹍﹍delay(5);﹍﹍﹍﹍//调用延时函数i++;//指向下一个音if(i=3){i=0;delay(10);}//一曲结束,重新开始播放}}voidtime()interrupt3//T1中断服务程序{﹍﹍TH1=th;﹍﹍﹍﹍//定时器重置初值(高位)TL1=tl;//定时器重置初值(低位)P1_3=~P1_3;//输出取反}5、程序功能:设置八个电子琴键(从P1口接入),能够通过按键发出相应的声音(弹奏)。利用单片机的定时器T0实现声音频率的产生(P3.3引脚接蜂鸣器)。选择项:①case0x7f:②case0xfe:③switch(i)④while(1)⑤TCON=0x10;⑥TMOD=0X01;⑦main()⑧P3_3=~P3_3;⑨voidINTTO()interrupt1⑩sbitP3_3=P3^3;源程序:#includereg52.h//头文件﹍﹍sbitP3_3=P3^3;﹍﹍﹍﹍//定义蜂鸣器输出引脚unsignedcharidatai,tl0_temp=0,th0_temp=0;//定义全局变量﹍voidINTTO()interrupt1﹍﹍﹍﹍﹍//T0服务程序{TH0=th0_temp;//定时器重置初值(高位)TL0=tl0_temp;//定时器重置初值(低位)﹍﹍P3_3=~P3_3;﹍﹍﹍﹍//输出取反}main()﹍﹍﹍﹍﹍﹍//主函数{P1=0xff;//端口初始化﹍﹍TMOD=0X01;﹍﹍﹍﹍//定时器工作方式设置ET0=1;//T0中断允许设置EA=1;//中断总允许设置TH0=0;//定时初值高位设置TL0=0;//定时初值低位设置﹍TCON=0x10;﹍﹍﹍﹍﹍//定时器启动设置﹍﹍while(1)﹍﹍﹍﹍//无限循环{i=P1;//读端口值﹍﹍switch(i)﹍﹍﹍﹍{case0xff:TR0=0;break;//无键按下﹍﹍case0xfe:﹍﹍﹍﹍th0_temp=0xfc;tl0_temp=0x43;TR0=1;break;//1键按下case0xfd:th0_temp=0xfc;tl0_temp=0xab;TR0=1;break;//2键按下case0xfb:th0_temp=0xfd;tl0_temp=0x08;TR0=1;break;//3键按下case0xf7:th0_temp=0xfd;tl0_temp=0x32;TR0=1;break;//4键按下case0xef:th0_temp=0xfd;tl0_temp=0x81;TR0=1;break;//5键按下case0xdf:th0_temp=0xfd;tl0_temp=0xc7;TR0=1;break;//6键按下case0xbf:th0_temp=0xfe;tl0_temp=0x05;TR0=1;break;//7键按下﹍﹍﹍case0x7f:﹍﹍﹍th0_temp=0xfe;tl0_temp=0x21;TR0=1;break;//8键按下default:TR0=0;break;//多键按下}}}6、程序功能:单片机控制两个共阳数码管实现计数显示(P0口接段码,P2.0口接十位数码管的位码,P2.1口接个位数码管的位码)。外中断0每触发一次,计数值加1;外中断1每触发一次,计数值减1。选择项:①if(a0)②voidint1(void)interrupt2③if(a99)④voidint0(void)interrupt0⑤diaplay();⑥a/10;⑦a%10;⑧P2=0x02;⑨P2=0x01;⑩voiddiaplay(void)源程序:#includereg51.h//头文件UnsignedcharTable[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//定义共阳数码管0~9显示码数组unsignedchardata_L,data_H;//定义全局变量:显示个位、十位chara=0;//定义全局变量:计数初值voiddelay(unsignedchark)//延时函数{unsignedcharm,n;for(m=0;mk;m++){for(n=0;n120;n++);}}﹍voiddiaplay(void﹍﹍﹍﹍﹍//动态显示函数{﹍P2=0x01;﹍﹍﹍﹍﹍//输出十位数码管位码P0=Table[data_H];//输出十位段码delay(1);//调用延时函数﹍﹍P2=0x02;﹍﹍﹍﹍//输出个位数码管位码P0=Table[data_L];//输出个位段码delay(1);//调用延时函数}voidmain(void)//主函数{IE=0X85;//开中断,外中断0、1允许TCON=0X05;//外中断1下降沿触发while(1)//无

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功