西南科技大学单片机上机考试题答案.docx

上传人:b****0 文档编号:10099086 上传时间:2023-05-23 格式:DOCX 页数:46 大小:24.62KB
下载 相关 举报
西南科技大学单片机上机考试题答案.docx_第1页
第1页 / 共46页
西南科技大学单片机上机考试题答案.docx_第2页
第2页 / 共46页
西南科技大学单片机上机考试题答案.docx_第3页
第3页 / 共46页
西南科技大学单片机上机考试题答案.docx_第4页
第4页 / 共46页
西南科技大学单片机上机考试题答案.docx_第5页
第5页 / 共46页
西南科技大学单片机上机考试题答案.docx_第6页
第6页 / 共46页
西南科技大学单片机上机考试题答案.docx_第7页
第7页 / 共46页
西南科技大学单片机上机考试题答案.docx_第8页
第8页 / 共46页
西南科技大学单片机上机考试题答案.docx_第9页
第9页 / 共46页
西南科技大学单片机上机考试题答案.docx_第10页
第10页 / 共46页
西南科技大学单片机上机考试题答案.docx_第11页
第11页 / 共46页
西南科技大学单片机上机考试题答案.docx_第12页
第12页 / 共46页
西南科技大学单片机上机考试题答案.docx_第13页
第13页 / 共46页
西南科技大学单片机上机考试题答案.docx_第14页
第14页 / 共46页
西南科技大学单片机上机考试题答案.docx_第15页
第15页 / 共46页
西南科技大学单片机上机考试题答案.docx_第16页
第16页 / 共46页
西南科技大学单片机上机考试题答案.docx_第17页
第17页 / 共46页
西南科技大学单片机上机考试题答案.docx_第18页
第18页 / 共46页
西南科技大学单片机上机考试题答案.docx_第19页
第19页 / 共46页
西南科技大学单片机上机考试题答案.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

西南科技大学单片机上机考试题答案.docx

《西南科技大学单片机上机考试题答案.docx》由会员分享,可在线阅读,更多相关《西南科技大学单片机上机考试题答案.docx(46页珍藏版)》请在冰点文库上搜索。

西南科技大学单片机上机考试题答案.docx

西南科技大学单片机上机考试题答案

/****************************************************************************************

*@file识别最大模拟输入通道

*@author秘密作战实验室(FREES)

*@versionv1.0

*@date2015-06-26

*功能:

利用0809采集两路模拟电压,

将电压值最大的通道号显示在LED显示器上。

(硬件电路参见AD_CH2_1.DSN)。

*

***************************************************************************************/

#include//51单片机头文件

#include

//宏定义

#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;i>0;i--)

for(j=114;j>0;j--);

}

/***********************************************************************

**函数名称:

TimeT1()

**功能:

定时器1初始化50ms定时

**入口参数:

**出口参数:

***********************************************************************/

voidTimeT1()

{

TMOD=0X10;//定时器1方式1

TH1=TIMER1DEF/256;//装定时初值高8位,定时50ms计算公式高位us=(65535-50000)/256

TL1=TIMER1DEF%256;//装定时初值低8位,定时50ms计算公式低位us=(65535-50000)%256

PT1=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_7>bAD_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熄灭。

***************************************************************************************/

#include"reg52.h"

#include"absacc.h"//Directaccessto8051

sbitCS=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)。

********/

#include"reg52.h"

#include"absacc.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;i

for(j=0;j<114;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%)。

****************************************************************************************/

#include"reg52.h"

sbitKey0=P1^0;//P1^0

sbitKey1=P1^1;//P1^1

sbitPWM=P1^7;

unsignedcharnum=0,Duty=5;

voidDelay(unsignedinttime)

{

unsignedinti=0,j=0;

for(i=0;i

for(j=0;j<114;j++);

}

voidKey_Scanf(void)//

if(Key0==0)

{

Delay(20);

if(Key0==0)

Duty-=1;

while(!

Key0);

}

if(Key1==0)

{

Delay(20);

if(Key1==0)

Duty+=1;

while(!

Key1);

}

Duty=Duty>1?

Duty:

1;

Duty=Duty<9?

Duty:

9;

}

voidTimer0_Inits(void)

{

TMOD|=0x01;

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

TR0=1;

ET0=1;

EA=1;

}

voidmain(void)

{

Timer0_Inits();

while

(1)

{

Key_Scanf();

}

}

voidPIT0(void)interrupt1

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

++num;

if(num<=Duty)

PWM=1;

else

PWM=0;

if(num>9)

num=0;

}

/****************************************************************************************

*@file编码显示器

*@author秘密作战实验室

*@versionv1.0

*@date2015-06-26

*功能:

利用8255扩展并行端口(硬件电路参见CodeDisplay_8255.DSN)。

当KEY按下时,利用8255的PC口输入二进制值编码(6位),

将该值转换成十进制后显示在2位7段LED显示器上。

***************************************************************************************/

#include"reg52.h"

#include"absacc.h"

sbitCS=P2^7;

#definePAXBYTE[0x0000]

#definePBXBYTE[0x0400]

#definePCXBYTE[0x0800]

#defineCNXBYTE[0xC000]

unsignedtable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharnumber=0;

voiddisplay(unsignedcharnum)

{

//PA=0xff;

PA=table[num/10];

//PB=0xff;

PB=table[num%10];

}

voidmain(void)

{

CS=0;

CN=0x89;//8255初始化,写控制字

while

(1)

{

number=PC&0x3f;

display(number);

}

}

/****************************************************************************************

*@file步进电机

*@author秘密作战实验室(FREE)

*@versionv1.0

*@date2015-06-26

*功能:

在SMSpeed.DSN的电路上实现:

当KEY2按下时,电机停止转动,释放时继续转动。

当KEY1按下时,电机以60转/min的转速正转,释放时以120转/min的转速反转。

****************************************************************************************/

#include"reg52.h"

sbitKey1=P3^3;

charnum=0;

unsignedintSpeed=50000;//25000对应120r/min,50000对应60r/min

chardir=1;//电机旋转方向定义

voiddelay(unsignedinttime)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<114;j++);

}

voidTimer0_Init(void)

{

TMOD|=0x09;

TH0=(65536-Speed)/256;

TL0=(65536-Speed)%256;

TR0=1;

ET0=1;

EA=1;

}

voidmoto(chara)

{

switch(a)

{

case0:

P1=0x01;break;

case1:

P1=0x02;break;

case2:

P1=0x04;break;

case3:

P1=0x08;break;

default:

break;

}

}

voidmain()

{

Timer0_Init();

while

(1)

{

if(Key1==0)

{

delay(5);

if(Key1==0)

{

Speed=25000;

dir=-1;

}

while(!

Key1);

}

else

{

dir=1;

Speed=50000;

}

}

}

voidtime0(void)interrupt1

{

TH0=(65536-Speed)/256;

TL0=(65536-Speed)%256;

num=num+dir;

if(num>=4)

num=0;

if(num<0)

num=3;

moto(num);

}

/****************************************************************************************

*@file步进输出模拟电压

*@author秘密作战实验室

*@versionv1.0

*@date2015-06-26

*功能:

利用0832在按键控制下步进输出模拟电压(硬件电路参见DA_BUF1_1.DSN)。

要求每

按键一次递增或递减0.1V。

设输出最大值为4V,最小值为1V。

***************************************************************************************/

#include"reg52.h"

#include"absacc.h"

sbitKey2=P1^6;

sbitKey1=P1^7;

#defineDA_SXBYTE[0x3c00]

unsignedcharDAVAL=128;

voiddelay(unsignedinttime)

{

unsignedinti=0,j=0;

for(i=0;i

for(j=0;j<114;j++);

}

voidsignal(unsignedcharnum)

{

WR=0;

DA_S=num;

}

voidmain(void)

{

while

(1)

{

if(Key1==0)

{

delay(10);

if(Key1==0)

DAVAL+=5;//按键加减5个数字量,会小些误差,因为0.1v对应的数字量是5.1,会有累计误差

while(!

Key1);//但word上面要求加减5个数字量,如果老师问起你还可以将这个问题,会有加分哦

}//^-^~嘿嘿~

if(Key2==0)

{

delay(10);

if(Key2==0)

DAVAL-=5;

while(!

Key2);

}

DAVAL=DAVAL>200?

200:

DAVAL;//三目运算符,对DAVAL进行限幅

DAVAL=DAVAL<50?

50:

DAVAL;

signal(DAVAL);

}

}

/****************************************************************************************

*@file单个模拟电压等级识别

*@author秘密作战实验室

*@versionv1.0

*@date2015-06-26

*功能:

利用0809采集单路模拟电压,将其分级(10级),并将分级数(0~9)显示在LED

显示器上。

(硬件电路参见AD_CH1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2