您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 西南科技大学单片机上机考试题答案
/*****************************************************************************************@file识别最大模拟输入通道*@author秘密作战实验室(FREES)*@versionv1.0*@date2015-06-26*功能:利用0809采集两路模拟电压,将电压值最大的通道号显示在LED显示器上。(硬件电路参见AD_CH2_1.DSN)。****************************************************************************************/#includereg51.h//51单片机头文件#includeabsacc.h//宏定义#defineTIMER1DEF(65536-50000)//定时时间#defineAD_Convert(i)(*((unsignedcharvolatilexdata*)(0x3c00+i))=0)//返回片外地址#defineAD_Read(i)(*((unsignedcharvolatilexdata*)(0x3c00+i)))//全局变量定义intFlag=0;intbAD_Val_2=0;//AD通道2转换结果intbAD_Val_7=0;//AD通道7转换结果inttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9/*************************************************************************函数名称:delay(n)**功能:程序延时nms**入口参数:无**出口参数:无***********************************************************************/voiddelay(intn)//{inti=0,j=0;for(i=n;i0;i--)for(j=114;j0;j--);}/*************************************************************************函数名称:TimeT1()**功能:定时器1初始化50ms定时**入口参数:无**出口参数:无***********************************************************************/voidTimeT1(){TMOD=0X10;//定时器1方式1TH1=TIMER1DEF/256;//装定时初值高8位,定时50ms计算公式高位us=(65535-50000)/256TL1=TIMER1DEF%256;//装定时初值低8位,定时50ms计算公式低位us=(65535-50000)%256PT1=1;//定时器1中断优先级高ET1=1;//定时器1中断控制位TR1=1;//定时器1启动控制位}/*************************************************************************函数名称:main()**功能:程序入口**入口参数:无**出口参数:无***********************************************************************/voidmain(void)//^-^加油~{//初始化P1=0Xff;//外部中断初始化IT1=1;//脉冲触发方式1:负跳变沿有效0:EX1=1;//外部中断1中断控制位TimeT1();//定时器1初始化EA=1;//开中断delay(500);while(1)//主循环{delay(50);if(bAD_Val_2=bAD_Val_7)P1=table[2];if(bAD_Val_7bAD_Val_2)P1=table[7];}}/*************************************************************************函数名称:INT_INT1()**功能:INT1中断服务程序,使用工作寄存器组1**入口参数:无**出口参数:无***********************************************************************/voidINT_INT1(void)interrupt2using1{if(Flag==1){bAD_Val_2=AD_Read(2);}if(Flag==2){bAD_Val_7=AD_Read(7);}}/*************************************************************************函数名称:INT_T1()**功能:T1中断服务程序,使用工作寄存器组1**入口参数:无**出口参数:无***********************************************************************/voidINT_T1()interrupt3using1{staticintbCount=3;--bCount;TH1=TIMER1DEF/256;TL1=TIMER1DEF%256;if(bCount==2){Flag=1;AD_Convert(2);}if(bCount==1){Flag=2;AD_Convert(7);}if(bCount==0)bCount=4;}/****************************************************************************************@file按键扫描*@author秘密作战实验室*@versionv1.0*@date2015-06-26*功能:利用8255的PC口实现3X3键盘扫描(硬件电路参见3X3KEY_8255.DSN)。当1~8号键独立按下时,连接在PA口对应的LEDx点亮(即1号键按下时LDE1亮,2号键按下时LDE2亮),当9号键按下时,所有LED点亮,当没有键按下时,所有LED熄灭。***************************************************************************************/#includereg52.h#includeabsacc.h//Directaccessto8051sbitCS=P2^7;//片选段#definePAXBYTE[0x0000]//定义端口A地址#definePBXBYTE[0x0400]//定义端口B地址#definePCXBYTE[0x0800]//定义端口C地址#defineCNXBYTE[0xC000]//定义控制口地址unsignedcharKey_Scanf(void)//按键扫描函数{unsignedcharkey=0;PC=0xFB;//把PC2置0,PC1和PC0置1第一列if(PC==0xDB)key=1;if(PC==0xBB)key=4;if(PC==0x7B)key=7;PC=0xFD;//把PC1置0,PC2和PC0置1第二列if(PC==0xDD)key=2;if(PC==0xBD)key=5;if(PC==0x7D)key=8;PC=0xFE;//把PC0置0,PC2和PC1置1第三列if(PC==0xDE)key=3;if(PC==0xBE)key=6;if(PC==0x7E)key=9;return(key);}voidmain(void)//给我最亲爱的女盆友~~~{unsignedinta=0xff;CS=0;CN=0x88;//8255初始化,写控制字while(1){switch(Key_Scanf()){case0:PA=0xff;break;case1:PA=0xfe;break;case2:PA=0xfd;break;case3:PA=0xfb;break;case4:PA=0xf7;break;case5:PA=0xef;break;case6:PA=0xdf;break;case7:PA=0xbf;break;case8:PA=0x7f;break;case9:PA=0x00;break;default:break;}}}/*****************************************************************************************@file50Hz锯齿波*@author秘密作战实验室(Frees)*@versionv1.0*@date2015-06-26*功能:利用0832同步输出两个频率为50赫兹的锯齿波(硬件电路参见DA_BUF2_1.DSN)。********/#includereg52.h#includeabsacc.h#defineDA_1XBYTE[0x2000]//设置DAC0832—1的选通地址#defineDA_2XBYTE[0x2400]//设置DAC0832—2的选通地址#defineDA_SXBYTE[0x3c00]//设置DAC0832的选通地址unsignedintDAVAL=0;voiddelay(unsignedinttime){unsignedinti=0,j=0;for(i=0;itime;i++)for(j=0;j114;j++);}voidsignal(unsignedcharnum)//{WR=0;DA_1=num;DA_2=num;DA_S=0;}voidTimer0_Inits(void)//定时器0初始化函数{TMOD|=0x01;TH0=(65535-200)/256;TL0=(65535-200)%256;TR0=1;ET0=1;EA=1;}voidmain(void){Timer0_Inits();while(1){//signal(DAVAL);}}voidtime0()interrupt1{TH0=(65535-200)/256;TL0=(65535-200)/256;DAVAL++;signal(DAVAL);if(DAVAL=255)DAVAL=0;}/*****************************************************************************************@filePwm发生器*@author秘密作战实验室*@versionv1.0*@date2015-06-26*功能:在硬件电路PWM.DSN中实现P1.7输出PWM波。周期T=100ms,初始占空比(T1/T)为50%,按键KEY1每次增加占空比10%(直到90%),KEY2每次减小占空比10%(直到10%)。****************************************************************************************/#includereg52.hsbitKey0=P1^0;//P1^0sbitKey1=P1^1;//P1^1sbitPWM=P1^7;unsignedcharnum=0,Duty=5;voidDelay(unsignedinttime){unsignedinti=0,j=0;for(i=0;itime;i++)for(j=0;j114;j++);}voidKey_Scanf(void)//if(Key0==0){Delay(20);if(Key0==0)Duty-=1;while(!Key0);}if(K
本文标题:西南科技大学单片机上机考试题答案
链接地址:https://www.777doc.com/doc-2035669 .html