标准实验报告 (1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
};
unsigned char t;//临时变量
//防止显示位置超出范围
x &= 0x07;
x = 7 - x;
//分析字符c,取得对应的数码管字型数据
if ( c == '-' )
{
t = 0x40;
}
else
{
t = toint(c);//toint()为库函数,详见C:\Keil\C51\HLP\
(一)试验要求
1、程序开始后:当只有第1个发光二极管亮时,同时第1个数码管显示数字1,其余显示”-”;持续秒之后,只有第2个发光二极管亮,同时第2个数码管显示数字2,其余显示”-” ;再过秒,只有第3个发光二极管亮,同时第3个数码管显示数字3,其余显示”-” ;……;间隔秒后,只有第8个发光二极管亮,同时第8个数码管显示数字8,其余显示”-” 。此后进入循环状态。循环过程中,按按键进入任务2。
if ( t < 16 )//如果是16进制字符
{
t = Tab[t];//查表,取得数码管字型数据
}
else
{
t = 0x00;//如果是其它字符则显示为空白
}
}
//检查是否显示小数点
if ( dp )
{
t |= 0x80;
}
else
{
t &= 0x7F;
}
//送到显示缓冲区显示
DispBuf[x] = t;
unsigned char KeyScan()
{
unsigned char k = '\0';
if ( KEY1 == 0 ) k = '+';
if ( KEY2 == 0 ) k = '-';
return k;
}
//定义显示缓冲区(由定时中断程序自动扫描)
unsigned char DispBuf[8];
I2C总线数据传送时有两种时序状态被分别定义为起始信号和终止信号。起始信号:在时钟线保持高电平期间,数据线在由高电平到低电平变化时启动I2C总线,为I2C总线的起始信号。
终止信号:在时钟线保持高电平期间,数据线在由低电平到高电平变化时将停止I2C总线的数据传送,为I2C总线的终止信号。
起始信号和终止信号都是由主控制器产生。总线上带有I2C总线接口的器件很容易检测到这些信号。但是对于不具备这些硬件接口的单片机来说,为了能准确地检测到这些信号,必须保证在总线的一个时钟周期内对数据线至少进行两次采样。
电子科技大学通信学院
实 验 报 告
实验名称现代电子技术综合实验
姓名:王超博
学号:20
评分:
教师签字
电子科技大学教务处制
电 子 科 技 大 学
实 验 报 告
学生姓名:王超博 学号:20 指导教师:赵宏飞
实验地点: 科A 333 实验时间:2014年6月4日
一、实验室名称:电子技术综合实验室
二、实验项目名称:现代电子技术综合实验
*/
void DispInit()
{
DispClear();//初始为全灭
EA = 0;
/*
TMOD &= 0x0F;
TMOD |= 0x10;
TH1 = 0xFC;
TL1 = 0x66;
*/
TR1 = 1;
ET1 = 1;
EA = 1;
}
/*
函数:Delay()
功能:延时~
参数:
t>0时,延时(t*s
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(~15V直流工作电压),多谐振荡器起振,输出~的音频信号,阻抗匹配器推动压电蜂鸣片发声。
原理图(二)
I2C工作原理:
在I2C总线上每传输一位数据,都有一个时钟脉冲相对应,其逻辑“0”和“1”的信号电平取决于该点的正端电源VDD的电压。I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平变化。
原理图(五)
3、软件设计
(完成程序框图)
(三)思考题
设定温度的按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。
七、总结及心得体会
通过一个星期的学习和实践,我从只能点亮一个LED灯到可以按照实验要求完成流水灯。在每一个小小的实现项目的完成,感觉自己都在一步一步的成长,虽然有的时候非常烦躁,实验结果老是出不来,而且找不到原因,并且被老师骂的一塌糊涂。但是,我还是坚持下来了。坚持着完成一个个小项目,这样自己的信心也一步一步增加。使得我很快就完成了实验。在此,需要谢谢老师的谆谆教导。
t=0时,延时
说明:
晶振用
*/
void Delay(unsigned int t)
{
SWTV = t;//软件定时器赋初值
SWTR = 1;//启动软件定时器
while ( !SWTF );//等待溢出
SWTR = 0;//停止软件定时器
SWTF = 0;//清除溢出标志
}
unsigned char MeasureSpeed()
原理图(四)
电机驱动原理:
步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组
按合适的时序通电,就能使步进电机步进转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
原理图(三)
LM75特征及应用:
LM75温度传感器包含一个模数转换器和一个数字过热检测器。主机可通过器件的I2C接口读取温度数据。当超出设置的温度门限时漏极开路的过热输出吸收电流。OS输出具体2种模式,比较器或中断模式。主机控制报警触触发门限和带回温度,低于带回温度报警条件无效。主机可读写LM75的TOS和THYST寄存器,器件上电时进入比较器模式,默认条件下TOS=+80且THYST=75。
2、停止任务1中发光二极管显示,数码管的第1、2位显示学号最后二位,第4、5位显示电机转速(初始转速30)。第7、8位实现秒表功能,从开始倒计时,计时到后程序自动进入任务3.
3、数码管的第1、2位显示电机转速,第3、4 、 5、6位显示”-”, 第7、8位显示二位电压值(~),增减调节电压值,电机转速(初始转速30)能够跟随电压增减以10倍变化量(0~24),进行加减速变化。按按键进入任务1。
dp:是否显示小数点,0-不显示,1-显示
*/
void DispChar(unsigned char x, unsigned char c, bit dp)
{
code unsigned char Tab[] =
{//定义09AbCdEF的数码管字型数据
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
unsigned char temp;
unsigned char Spee源自文库;//预设的电机转速值,范围20~250
bit SWTR;//软件定时器运行标志
bit SWTF;//软件定时器溢出标志
unsigned int SWTV;
/*
函数:T1INTSVC()
功能:定时器T1的中断服务函数
*/
void T1INTSVC() interrupt 3
{
TH0 = TL0 = 0;//清除计数器T0
TR0 = 1;//启动计数器T0
Delay(2500);//延时250ms(因为直流电机转盘上正好有4个槽)
TR0 = 0;//停止计数
TF0 = 0;//清除(可能的)溢出标志
return TL0;//返回结果(单位:转/秒;已知电机转速不会超过100)
功能:清除数码管的所有显示
*/
void DispClear()
{
unsigned char i;
for ( i=0; i<8; i++ )
{
DispBuf[i] = 0x00;
}
}
/*
函数:DispChar()
功能:在数码管上显示字符
参数:
x:数码管的坐标位置(0~7)
c:要显示的字符(仅限16进制数字和减号)
unsigned char i;
unsigned char t;
for ( i=0; i<2; i++ )
{
t = c / Tab[i];
*s++ = '0' + t;
c -= t * Tab[i];
}
*s++ = '0' + c;
*s = '\0';
}
/*
函数:DispInit()
功能:数码管扫描显示初始化
}
/*
函数:SysInit()
功能:系统初始化
*/
/*
void SysInit()
{
TMOD &= 0xF0;
TMOD |= 0x01;//设置定时器T0为16位定时器
DispInit();//数码管扫描显示初始化
}
*/
void SysInit()
{
unsigned char i;
for ( i=0; i<8; i++ )
{
c = *s++;
if ( c == '\0' ) break;
DispChar(x++,c,0);
}
}
/*
函数:ByteToStr()
功能:字节型变量c转换为十进制字符串
*/
void ByteToStr(unsigned char idata *s, unsigned char c)
{
code unsigned char Tab[] = {10,1};
三、实验学时:40
四、实验目的与任务:
1、熟悉系统设计与实现原理
2、掌握KEIL C51的基本使用方法
3、熟悉SMART SOPC实验箱的应用
4、连接电路,编程调试,实现各部分的功能
5、完成系统软件的编写与调试
五、实验器材
1、PC机一台
2、示波器、SMART SOPC实验箱一套
六、实验原理、步骤及内容
八、对本实验过程及方法、手段的改进建议

九、附录
综合实验程序:
#include <>
#include <>
#include <>
sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
sbit PWM = P2^6;
sbit CS = P3^5;
sbit DAT = P3^6;
sbit CLK = P3^7;
原理图(一)
蜂鸣器工作原理:
蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
}
/*
函数:DispStr()
功能:在数码管上显示字符串
参数:
x:显示的起始位置(0~7)
*s:要显示的字符串(内容仅限16进制数字和减号)
*/
void DispStr(unsigned char x, unsigned char idata *s)
{
unsigned char c;
for (;;)
{
DispBuf[i] = 0x00;//数码管初始化为全灭
}
Speed = 35;//设置电机初始转速
SWTR = 0;
SWTF = 0;
SWTV = 0;
{
code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
static unsigned char n = 0;
static unsigned char t = 0;
//扫描数码管
P0 = 0xFF;//暂停显示
XBYTE[0xE800] = ~DispBuf[n];//更新扫描数据
P0 = ~com[n];//重新显示
n++;
n &= 0x07;
//产生PWM方波,驱动电机
t++;
if ( t < Speed )
{
PWM = 1;
}
else
{
PWM = 0;
}
//模拟一个软件定时器
if ( SWTR )
{
if ( --SWTV == 0 ) SWTF = 1;
}
}
/*
函数:DispClear()
(二)实验内容
1、硬件设计
PDIP40封装80C51引脚布局图 SmartSOPC相配套的基于8051单片机的Quick51核心板
2、各部分硬件原理
数码管动态扫描原理:
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
相关文档
最新文档