安装APP,随时看
文档分类
当前位置:首页 > 西南科技大学单片机上机考试题答案
num=3; moto(num); }
/****************************************************************************************
* @file 步进输出模拟电压 * @author 秘密作战实验室 * @version v1.0
* @date 2015-06-26
* 功 能: 利用0832在按键控制下步进输出模拟电压(硬件电路参见DA_BUF1_1.DSN)。要求每
按键一次递增或递减0.1V。设输出最大值为4V,最小值为1V。
***************************************************************************************/
#include\#include\sbit Key2=P1^6; sbit Key1=P1^7;
#define DA_S XBYTE[0x3c00] unsigned char DAVAL=128; void delay(unsigned int time) { unsigned int i=0,j=0; for(i=0;ivoid signal(unsigned char num) { WR=0; DA_S=num; } void main(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 秘密作战实验室 * @version v1.0 * @date 2015-06-26 * 功 能: 利用0809采集单路模拟电压,将其分级(10级),并将分级数(0~9)显示在LED 显示器上。(硬件电路参见AD_CH1_1.DSN)。 ***************************************************************************************/ #include //宏定义 #define TIMER1DEF ( 65536 - 50000 ) #define AD_Convert(i) (*((unsigned char volatile xdata *) (0x3c00 + i)) = 0) #define AD_Read(i) (*((unsigned char volatile xdata *) (0x3c00 + i))) //全局变量定义 int bAD_Val = 0; // 转换结果 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*********************************************************************** ** 函数名称: delay() ** 功 能: 延时n毫秒 ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void delay(int time) { int i=0,j=0; for(i=time;i>0;i--) for(j=114;j>0;j--); } /*********************************************************************** ** 函数名称: TimeT1() ** 功 能: 定时器1初始化,定时50ms ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void TimeT1() { TMOD=0X10; //定时器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%6; PT1=1;//定时器1 中断优先级 高 ET1=1;//定时器1 中断控制位 TR1=1; } /*********************************************************************** ** 函数名称: main() ** 功 能: 程序入口 ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void main(void) { P1=0Xff; // 初始化 TimeT1(); IT1=1; //脉冲触发方式 EX1=1; EA =1; // 开中断 delay(500); while( 1 ) // 主循环 { delay(50); P1=table[10*bAD_Val/256]; } } /*********************************************************************** ** 函数名称: INT_INT1() ** 功 能: INT1中断服务程序,使用工作寄存器组1 ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void INT_INT1(void) interrupt 2 using 1 { bAD_Val=AD_Read(4); } /*********************************************************************** ** 函数名称: INT_T1() ** 功 能: T1中断服务程序,使用工作寄存器组1 ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void INT_T1() interrupt 3 using 1 { static int bCount = 2; TH1=TIMER1DEF/256; TL1=TIMER1DEF%6; if( --bCount == 0) // 判断100毫秒时间到 { bCount=2; AD_Convert(4); } } /**************************************************************************************** * @file 单个模拟电压监测 * @author 秘密作战实验室 * @version v1.0 * @date 2015-06-26 * 功 能: 在VoltageMonitor_1.DSN的电路中测量由电位器产生的模拟电压,当电压小于1V时, 使连接在P1.0上的(黄)色LED亮;当电压大于4V时,使连接在P1.1上的(红)色 LED亮当电压在1~4V时,所有LED熄灭。 要求:当信号变化后,必须在100毫秒内做出响应。 ****************************************************************************************/ #include //宏定义 #define TIMER1DEF ( 65536 - 50000 ) #define AD_Convert(i) (*((unsigned char volatile xdata *) (0x2000 + i)) = 0) #define AD_Read(i) (*((unsigned char volatile xdata *) (0x2000 +i))) //全局变量定义 int bAD_Val = 0; // 转换结果 sbit P1_0=P1^0; sbit P1_1=P1^1; /*********************************************************************** ** 函数名称: delay() ** 功 能: 延时n毫秒 ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void delay(int time) { int i,j; for(i=0;i/*********************************************************************** ** 函数名称: TimeT1() ** 功 能: 定时器1初始化,定时50ms ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void TimeT1() { TMOD=0X10; //定时器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%6; PT1=1;//定时器1 中断优先级 高 ET1=1;//定时器1 中断控制位 TR1=1; } 123456 搜索更多关于: 西南科技大学单片机上机考试题答案 的文档
void signal(unsigned char num) { WR=0; DA_S=num; }
void main(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 秘密作战实验室 * @version v1.0
* 功 能: 利用0809采集单路模拟电压,将其分级(10级),并将分级数(0~9)显示在LED
显示器上。(硬件电路参见AD_CH1_1.DSN)。
#include //宏定义
#define TIMER1DEF ( 65536 - 50000 ) #define AD_Convert(i) (*((unsigned char volatile xdata *) (0x3c00 + i)) = 0) #define AD_Read(i) (*((unsigned char volatile xdata *) (0x3c00 + i))) //全局变量定义
int bAD_Val = 0; // 转换结果
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*********************************************************************** ** 函数名称: delay()
** 功 能: 延时n毫秒 ** 入口参数: 无 ** 出口参数: 无
***********************************************************************/ void delay(int time) {
int i=0,j=0;
for(i=time;i>0;i--) for(j=114;j>0;j--); }
/*********************************************************************** ** 函数名称: TimeT1()
** 功 能: 定时器1初始化,定时50ms ** 入口参数: 无 ** 出口参数: 无
***********************************************************************/ void TimeT1() {
TMOD=0X10; //定时器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%6;
PT1=1;//定时器1 中断优先级 高 ET1=1;//定时器1 中断控制位 TR1=1; }
/*********************************************************************** ** 函数名称: main() ** 功 能: 程序入口 ** 入口参数: 无 ** 出口参数: 无
***********************************************************************/ void main(void) { P1=0Xff; // 初始化 TimeT1(); IT1=1; //脉冲触发方式 EX1=1; EA =1; // 开中断 delay(500); while( 1 ) // 主循环 { delay(50); P1=table[10*bAD_Val/256]; } }
/*********************************************************************** ** 函数名称: INT_INT1()
** 功 能: INT1中断服务程序,使用工作寄存器组1 ** 入口参数: 无 ** 出口参数: 无
***********************************************************************/ void INT_INT1(void) interrupt 2 using 1 {
bAD_Val=AD_Read(4); }
/*********************************************************************** ** 函数名称: INT_T1()
** 功 能: T1中断服务程序,使用工作寄存器组1 ** 入口参数: 无 ** 出口参数: 无
***********************************************************************/ void INT_T1() interrupt 3 using 1 { static int bCount = 2; TH1=TIMER1DEF/256; TL1=TIMER1DEF%6; if( --bCount == 0) // 判断100毫秒时间到 { bCount=2; AD_Convert(4); } }
* @file 单个模拟电压监测 * @author 秘密作战实验室 * @version v1.0
* 功 能: 在VoltageMonitor_1.DSN的电路中测量由电位器产生的模拟电压,当电压小于1V时,
使连接在P1.0上的(黄)色LED亮;当电压大于4V时,使连接在P1.1上的(红)色 LED亮当电压在1~4V时,所有LED熄灭。
要求:当信号变化后,必须在100毫秒内做出响应。
****************************************************************************************/
#define TIMER1DEF ( 65536 - 50000 ) #define AD_Convert(i) (*((unsigned char volatile xdata *) (0x2000 + i)) = 0) #define AD_Read(i) (*((unsigned char volatile xdata *) (0x2000 +i))) //全局变量定义 int bAD_Val = 0; // 转换结果 sbit P1_0=P1^0; sbit P1_1=P1^1;
/*********************************************************************** ** 函数名称: delay()
***********************************************************************/ void delay(int time) { int i,j;
for(i=0;i/*********************************************************************** ** 函数名称: TimeT1() ** 功 能: 定时器1初始化,定时50ms ** 入口参数: 无 ** 出口参数: 无 ***********************************************************************/ void TimeT1() { TMOD=0X10; //定时器1 方式1 TH1=TIMER1DEF/256; TL1=TIMER1DEF%6; PT1=1;//定时器1 中断优先级 高 ET1=1;//定时器1 中断控制位 TR1=1; } 123456 搜索更多关于: 西南科技大学单片机上机考试题答案 的文档
共分享92篇相关文档