单片机试题库程序及答案_第1页
单片机试题库程序及答案_第2页
单片机试题库程序及答案_第3页
单片机试题库程序及答案_第4页
单片机试题库程序及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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()⑩#include<reg51.h>#include<absacc.h>//存放绝对地址宏定义的函数原型#include<reg51.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]⑩#include<absacc.h>源程序:﹍#include<absacc.h>﹍﹍﹍﹍﹍//存放绝对地址宏定义的函数原型#include<reg51.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;i<4;i++)⑨voiddelay(void)⑩uchartime[4]={23,59,58,0};源程序:#include"reg51.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;k>0;k--);}voiddisplay(void)//显示函数{uchari,k;k=0x01;//设置位选线初值﹍for(i=0;i<4;i++)﹍﹍﹍﹍﹍//循环4次{P2=0;//关闭显示﹍P0=dispcode[time[i]%10];﹍﹍﹍﹍﹍//输出个位数的段码P2=k;//送位码k=k<<1;//位码左移一位delay();//调用延时函数P2=0;//关闭显示﹍P0=dispcode[time[i]/10];﹍﹍﹍﹍﹍//输出十位数的段码P2=k;//送位码k=k<<1;//位码左移一位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;i<250;i++)//循环250次﹍﹍display();﹍﹍﹍﹍//调用显示函数﹍﹍calc();﹍﹍﹍﹍//调用时间计算函数}}4、程序功能:用单片机控制蜂鸣器播放一首简单的曲子。利用定时器T1实现声音频率的产生(P1.3引脚接蜂鸣器)。选择项:①unsignedintcodetable[3]={64260,64400,64524};②th=(table[n]/256);③unsignedchari,j,k;④for(i=0;i<m;i++)⑤unsignedchari;⑥ET1=1;⑦EA=1;⑧TR1=1;⑨delay(5);⑩TH1=th;源程序:#include"reg51.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;i<m;i++)﹍﹍﹍for(j=0;j<200;j++)for(k=0;k<100;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;源程序:#include"reg52.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(a<0)②voidint1(void)interrupt2③if(a>99)④voidint0(void)interrupt0⑤diaplay();⑥a/10;⑦a%10;⑧P2=0x02;⑨P2=0x01;⑩voiddiaplay(void)源程序:#include<reg51.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;m<k;m++){for(n=0;n<120;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)//无限循环{data_L=﹍﹍a%10;﹍﹍﹍﹍//读取计数值个位data_H=﹍a/10;﹍﹍﹍﹍﹍//读取计数值十位﹍﹍diaplay();﹍﹍﹍﹍//调用显示函数}}﹍﹍voidint0(void)interrupt0﹍﹍﹍﹍//外部中断0函数{﹍﹍if(a>99)﹍﹍﹍﹍a=0;//计数值过大,清零elsea++;//计数值加1}﹍voidint1(void)interrupt2﹍﹍﹍﹍﹍//外部中断1函数{﹍﹍if(a<0)﹍﹍﹍﹍a=99;//计数值过小,送最大值elsea--;//计数值减1}7、程序功能:单片机P0口控制八个条形发光二极管实现键控移位。外中断0每触发一次,LED左移一位;外中断1每触发一次,LED右移一位。选择项:①#include<intrins.h>②unsignedchara;③unsignedcharm,n;④IE=0X85;⑤TCON=0X05;⑥while(1)⑦P0=~a;⑧voidint0(void)interrupt0⑨voidint1(void)interrupt2⑩a=_cror_(a,1);源程序:#include<reg51.h>//头文件﹍#include<intrins.h>﹍﹍﹍﹍﹍//包含循环移位函数的头文件unsignedchara;﹍﹍﹍﹍﹍﹍//定义全局变量voiddelay(unsignedchark)//延时函数{﹍unsignedcharm,n;﹍﹍﹍﹍﹍for(m=0;m<k;m++);{for(n=0;n<120;n++);}}voidmain(void)//主函数{﹍IE=0X85;﹍﹍﹍﹍﹍//开中断,外中断0、1允许﹍﹍TCON=0X05;﹍﹍﹍﹍//外中断0、1下降沿触发a=0x01;//设置点亮初值﹍﹍while(1)﹍﹍﹍﹍//无限循环﹍﹍﹍P0=~a;﹍﹍﹍//端口输出}﹍voidint0(void)interrupt0﹍﹍﹍﹍﹍//外部中断0函数{delay(100);//调用延时函数a=_crol_(a,1);//循环左移1位}﹍﹍voidint1(void)interrupt2﹍﹍﹍﹍//外部中断1函数{delay(100);//调用延时函数﹍﹍﹍a=_cror_(a,1);﹍﹍﹍循环右移1位}8、程序功能:单片机的P2.0~P2.3引脚分别控制电机的A、B、C、D四相。从P3.0接入一个开关,输入为0时,四相步进电机单双相正转;输入为1时,四相步进电机单双相反转。选择项:①unsignedcharpai_num;②voidtimer(void)interrupt1using1③TH0=(65536-60000)/256;④pai_num++;⑤pai_num=0;⑥pai_num=7;⑦pai_num--;⑧P2=moto_pai[pai_num];⑨voidmain()⑩TL0=(65536-60000)%256;源程序:#include<reg52.h>//头文件unsignedcharmoto_pai[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//单双相正转﹍unsignedcharpai_num;﹍﹍﹍﹍﹍//状态号sbitcf=P3^0;//开关设置﹍voidtimer(void)interrupt1using1﹍﹍﹍﹍﹍//T0中断服务程序{﹍TH0=(65536-60000)/256;﹍﹍﹍﹍﹍//定时器重置初值(高位)TL0=(65536-60000)%256;//定时器重置初值(低位)if(cf==0)//开关闭合{﹍﹍﹍pai_num++;﹍﹍﹍//状态号加1if(pai_num>=8)﹍﹍﹍pai_num=0;﹍﹍﹍//若状态号过大,回零}else//开关断开{if(pai_num<=0)﹍﹍﹍﹍pai_num=7;﹍﹍//若状态号过小,赋最大值else﹍﹍﹍pai_num--;﹍﹍﹍//否则,状态号减1}﹍﹍﹍P2=moto_pai[pai_num];﹍﹍﹍//端口输出}﹍voidmain()﹍﹍﹍﹍﹍//主函数{TMOD=0X01;//定时器工作方式设置TH0=(65536-60000)/256;//定时初值高位设置﹍﹍﹍TL0=(65536-60000)%256;﹍﹍﹍//定时初值低位设置EA=1;//中断总允许设置ET0=1;//T0中断允许设置P2=moto_pai[0];//设置初始输出pai_num=0;//设置状态号初值TR0=1;//启动定时器0while(1);//无限循环}9、程序功能:单片机的P2.0~P2.3引脚分别控制电机的A、B、C、D四相。P3.0~P3.5每个引脚接入一个按键,分别对应单相正转、单相反转、双相正转、双相反转、单双相正转、单双相反转六种工作方式,同时用共阴数码管显示序号1~6。选择项:①{0x01,0x02,0x04,0x08};②{0x03,0x06,0x0c,0x09};③k=~P3;④switch(k)⑤P0=0x06;⑥P0=0x5B;⑦case0x04:⑧case0x08:⑨for(i=0;i<8;i++)⑩for(i=8;i>0;i--)源程序:#include<at89x51.h>//头文件#defineucharunsignedcharucharcodetab1[]=﹍{0x01,0x02,0x04,0x08};﹍﹍﹍﹍﹍//单相正转加电代码ucharcodetab2[]=﹍{0x03,0x06,0x0c,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论