云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 西南科技大学单片机上机考试题答案

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

  • 62 次阅读
  • 3 次下载
  • 2026/4/23 20:01:54

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

* @file 识别最大模拟输入通道 * @author 秘密作战实验室(FREES) * @version v1.0

* @date 2015-06-26

* 功 能: 利用0809采集两路模拟电压,

将电压值最大的通道号显示在LED显示器上。(硬件电路参见AD_CH2_1.DSN)。 *

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

#include //51单片机头文件 #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 Flag=0;

int bAD_Val_2 = 0; // AD通道2转换结果 int bAD_Val_7 = 0; // AD通道7转换结果

int table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9 /*********************************************************************** ** 函数名称: delay(n)

** 功 能: 程序延时n ms ** 入口参数: 无 ** 出口参数: 无

***********************************************************************/ void delay(int n) //{ int i=0,j=0; for(i=n;i>0;i--) for(j=114;j>0;j--); }

/*********************************************************************** ** 函数名称: TimeT1()

** 功 能: 定时器1初始化 50ms定时 ** 入口参数: 无 ** 出口参数: 无

***********************************************************************/ void TimeT1() {

TMOD=0X10; //定时器1 方式1 TH1=TIMER1DEF/256; //装定时初值高8位,定时50ms 计算公式 高位us=(65535-50000)/256 TL1=TIMER1DEF%6; //装定时初值低8位,定时50ms 计算公式 低位us=(65535-50000)%6 PT1=1; //定时器1 中断优先级 高 ET1=1; //定时器1 中断控制位 TR1=1; //定时器1 启动控制位 }

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

** 函数名称: main() ** 功 能: 程序入口 ** 入口参数: 无 ** 出口参数: 无

***********************************************************************/ void main(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 ** 入口参数: 无 ** 出口参数: 无

***********************************************************************/ void INT_INT1(void) interrupt 2 using 1 { if(Flag==1) { bAD_Val_2=AD_Read(2); } if(Flag==2) { bAD_Val_7=AD_Read(7); } }

/*********************************************************************** ** 函数名称: INT_T1()

** 功 能: T1中断服务程序,使用工作寄存器组1 ** 入口参数: 无 ** 出口参数: 无

***********************************************************************/ void INT_T1() interrupt 3 using 1 {

static int bCount = 3 ; --bCount;

TH1=TIMER1DEF/256; TL1=TIMER1DEF%6;

if( bCount == 2) { Flag=1; AD_Convert(2); } if(bCount==1) { Flag=2; AD_Convert(7); } if(bCount==0) bCount=4; }

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

* @file 按键扫描

* @author 秘密作战实验室 * @version v1.0

* @date 2015-06-26

* 功 能: 利用8255的PC口实现3X3键盘扫描(硬件电路参见3X3KEY_8255.DSN)。 当1~8号键独立按下时,连接在PA口对应的LEDx点亮(即1号键按下时LDE1亮,2号键按下时LDE2亮),

当9号键按下时,所有LED点亮,当没有键按下时,所有LED熄灭。

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

#include\

#include\sbit CS=P2^7; //片选段

#define PA XBYTE[0x0000] //定义端口A地址 #define PB XBYTE[0x0400] //定义端口B地址 #define PC XBYTE[0x0800] //定义端口C地址 #define CN XBYTE[0xC000] //定义控制口地址 unsigned char Key_Scanf(void) //按键扫描函数 { unsigned char key=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); }

void main(void) //给我最亲爱的女盆友~~~ {

unsigned int a=0xff; CS=0; CN=0x88;//8255初始化,写控制字 while(1) { switch(Key_Scanf()) { case 0:PA=0xff;break; case 1:PA=0xfe;break; case 2:PA=0xfd;break; case 3:PA=0xfb;break; case 4:PA=0xf7;break; case 5:PA=0xef;break; case 6:PA=0xdf;break; case 7:PA=0xbf;break; case 8:PA=0x7f;break; case 9:PA=0x00;break; default:break; } } }

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

* @file 50Hz锯齿波

* @author 秘密作战实验室 (Frees) * @version v1.0

* @date 2015-06-26

* 功 能: 利用0832同步输出两个频率为50赫兹的锯齿波(硬件电路参见DA_BUF2_1.DSN)。 ********/

#include\ #include\

#define DA_1 XBYTE[0x2000] //设置DAC0832—1的选通地址 #define DA_2 XBYTE[0x2400] //设置DAC0832—2的选通地址 #define DA_S XBYTE[0x3c00] //设置DAC0832的选通地址 unsigned int DAVAL=0;

void delay(unsigned int time) { unsigned int i=0,j=0; for(i=0;i

搜索更多关于: 西南科技大学单片机上机考试题答案 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

/**************************************************************************************** * @file 识别最大模拟输入通道 * @author 秘密作战实验室(FREES) * @version v1.0 * @date 2015-06-26 * 功 能: 利用0809采集两路模拟电压, 将电压值最大的通道号显示在LED显示器上。(硬件电路参见AD_CH2_1.DSN)。 * ********************************************************************************

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com