天津大学《电子系统设计》实验报告部分.docx
- 文档编号:23493748
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:25
- 大小:2.12MB
天津大学《电子系统设计》实验报告部分.docx
《天津大学《电子系统设计》实验报告部分.docx》由会员分享,可在线阅读,更多相关《天津大学《电子系统设计》实验报告部分.docx(25页珍藏版)》请在冰豆网上搜索。
天津大学《电子系统设计》实验报告部分
一、实验要求
(一)利用IDE软件设计输出一个伪正弦阶梯波,要求如下:
1、输出一个频率处于100HZ~1000HZ之间的由明显阶梯的伪正弦波
2、利用开发板控制伪正弦波频率步进步退功能,间隔分别为±100HZ,
3、利用开发板控制伪正弦波的频率,从开发板键盘输入任意三位数,按“键入”之后输出该频率的正弦波,误差不超过±5%
4、开发板的数字显示屏能过显示当前频率,误差不超过±5%
(二)利用TINA和FilterProDesktop设计滤波器和放大器
1、根据题目要求,利用FilterProDesktop软件设计出二阶巴特沃斯滤波电路大致的电路模型
2、利用TINA对初步电路进行修改完善,并进行模拟仿真
3、利用TINA设计放大电路将输出波形放大
(三)焊接电路
1、根据仿真结果组装电路图,并对组装结果进行调试修改
2、强修改结果进行排布并焊接在电路板
二、实验目的
1、了解SDCC和IDE的安装过程
2、熟悉万用表、示波器、实验电源等的使用
3、学会利用IDE建立工程、编程、连接开发板和拷贝工程到开发板上
4、熟悉开发板,了解不同排针的功能,熟悉开发板的工作原理和构造
5、学习将FilterProDesktop和TINA结合使用并进行电路设计仿真
6、学会独立设计滤波器和放大器,以及解决实验中遇到的各种问题
7、巩固焊接电路的手法,学习如何焊接出更加美观的电路
三、实验器件
1、实验器材:
示波器、实验电源、MUC(C8051F020)、数字信号发生器、电脑、电烙铁、剪线钳、吸锡器
2、实验元件:
LM358,MAX7400,电阻:
10KΩ*3、20kΩ*2,瓷片电容:
10nF*3、100nF*2,电解电容:
1000μF*1、220μF*1,电路板一个、排针一组、电线若干、焊锡若干
四、实验过程
1、实验分工:
(1)软件部分:
刘晓寰
(2):
硬件加报告:
徐婧文、吴美润
2、安装SDCC和IDE软件
3、学习如何使用IDE建立工程,编辑程序,连接开发板,并将工程拷贝到开发板上
4、学习实例程序,了解IDE程序语言以及编程要求
5、在示例程序的基础上对程序进行修改,使经过开发板上的输出波形满足实验要求,并且能在开发板上实现步进,步退以及任意频率输出的实验要求
6、熟悉FilterProDesktop和TINA模拟仿真软件的使用,学会用FilterProDesktop设计基础滤波电路并用TINA进行仿真完善,用TINA设计放大电路并将滤波电路输出作为放大电路的输入进行仿真
7、利用面包板测试仿真结果电路并对其进行参数上的修改(注:
测试前检查电路连接是否出错,测试时小心芯片爆炸)
8、将利用IDE编写好的程序通过开发板数出并作为面包板的输入,再次测试电路是否可用,如果不行继续对参数进行修改
9、设计电源电路要求能输入+5V电压,
10、对电源电路进行测试,测试无误后进行焊接(注:
测试电路时远离电路板,小心电源电路爆炸)
11、对修改后的实验电路进行排版焊接。
(注:
电路板上下三排和其中一端的三排接线和其余部分不同,电路板是纵向三孔连在一起的,与面包板不同)
12、焊接完成后对实验电路进行再次测试,测试成功后将电源电路接入总电路,再次进行测试
五、实验代码
/*====================================================
电子系统设计平台实验板演示程序
Release2013
=====================================================*/
#include"driver\common.h"
#include"driver\osc.h"
#include"driver\io_config.h"
#include"driver\uart.h"
//volatileunsignedcharkey_value;
/*
sbitTP0=P0^7;
sbitTP1=P0^6;
*/
SBIT(TP0,SFR_P0,7);
SBIT(TP1,SFR_P0,6);
staticLED_BUF[6]={0xff,0xff,0xff,0xff,0xff,0xff};//LED数码管显示缓冲区,共6字节
unsignedintSamplingControl=0;/*控制正弦波的采用点数*/
unsignedintFrequencyControl=100;
unsignedintBreakTime=0;/*截断时间*/
/*正弦函数表*/
conststaticSIN[]={
/*输出电压从0到最大值(正弦波1/4部分)*/
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,
0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,
0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,
0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,
0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,
0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
/*输出电压从最大值到0(正弦波1/4部分)*/
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,
0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,
0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,
0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,
0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,
0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,
0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,
/*输出电压从0到最小值(正弦波1/4部分)*/
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,
0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,
0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,
0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,
0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,
0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
/*输出电压从最小值到0(正弦波1/4部分)*/
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,
0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,
0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,
0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,
0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,
0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80,
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
intmain(void)
{
unsignedinti,j,f=100,KeyBuffer=0;
unsignedintKeyValue=16,KeyTime=0;
Osc_Init_Parameter_tOsc_Init_Parameter;//振荡器初始化参数
//用于键盘线扫描:
D7=0,D6=0,D5=0,D4=0
unsignedcharLINE[4]={0x7F,0xBF,0xDF,0xEF};
//字符对应的段数值:
"0""1""2""3""4""5""6""7""8""9"".""8."""
unsignedcharDIGI[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x00,0xff};
//键值D0=0,D1=0,D2=0,D3=0
unsignedcharKEY[4]={0x0e,0x0d,0x0b,0x07};
EA=0;//中断全局关闭
//关闭开门狗定时器
WDTCN=0xDE;
WDTCN=0xAD;
/**InitializetheOSC*/
Osc_Init_Parameter.Source_Select=EXTERNAL_OSC;
Osc_Init_Parameter.External_Mode=CRYSTAL;
Osc_Init_Parameter.Frequency=24000000;
Osc_Init(&Osc_Init_Parameter);
Loop_Delay(100);
io_config();
io_init();
XBR0=XBR0|BIT2_MASK;//UART0:
P0.0和P0.1
XBR2=XBR2|BIT6_MASK;//enablecrossbar
REF0CN=REF0CN|BIT1_MASK|BIT0_MASK;//enabletheinternalvoltagereference
DAC0CN=DAC0CN|BIT7_MASK|BIT2_MASK;//enableDAC0,DAC0H:
8bit;DAC0L:
4bit
DAC1CN=DAC1CN|BIT7_MASK|BIT2_MASK;//enableDAC1,DAC1H:
8bit;DAC1L:
4bit
DAC0L=0;
DAC0H=0;
DAC1L=0;
DAC1H=0;
Uart0_Init();
/*
printf("\n");
printf("TianjinUniversity\n");
printf("ElectronicSystemDesignKit\n");
printf("Version1.0[C]2012\n");
printf("----------------------------\n");
printf("MCU:
C8051F020/24MHz\n");
printf("PWR:
3.3V/100mA\n");
printf("\n");
*/
//////////////////////////////////////////////////////
//
//Timer0/1initialization
//
//////////////////////////////////////////////////////
//BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
//---------------------------------------------------------------------
//TCON:
TF1TR1TF0TR0IE1IT1IE0IT0
//00010000
//
//TMOD:
GATE1C/T1T1M1T1M0GATE0C/T0T0M1T0M0
//00000010
//
//IE:
EAIEGF0ET2ES0ET1EX1ET0EX0
//10000010
TL0=(231);//when24MHz&SYSCLK/12,10kHztimeout
TH0=(231);//reload
EA=1;
ET0=1;
TMOD=0x02;
TR0=1;
//////////////////////////////////////////////////////
#if1
//测试字符显示
//while
(1)
{
for(j=0;j<12;j++)
{
for(i=0;i<6;i++)
{
LED_BUF[i]=DIGI[j];
}
P4=0xFF;
Loop_Delay(500);
P4=0xF0;
Loop_Delay(500);
}
}
#endif
///////////////////////////////////////////////////////
#if0
//测试IO最大翻转速度
while
(1)
{
TP0=0;
TP0=1;
TP0=0;
TP0=1;
TP0=0;
TP0=1;
/*TP0=0;
TP0=1;
TP0=0;
TP0=1;*/
}
#endif
///////////////////////////////////////////////////////
#if0
//测试LED数码管
while
(1)
{
P2=0x01;
for(i=0;i<6;i++)
{
P1=0x00;
Loop_Delay
(1);
P1=0xFF;
Loop_Delay
(1);
P2=P2<<1;
}
}
#endif
///////////////////////////////////////////////////////
#if1
//测试键盘,LED数码管低两位显示行列值
while
(1)
{
intl=0;
//KeyValue=0;
for(i=0;i<4;i++)
{
P3=LINE[i];
Loop_Delay
(1);
for(j=0;j<4;j++)
{
if((P3&0x0f)==KEY[j])
{
KeyValue=i*4+j;/*计算键值*/
//LED_BUF[0]=DIGI[j+1];
//LED_BUF[1]=DIGI[i+1];
LED_BUF[3]=DIGI[12];
LED_BUF[4]=DIGI[12];
LED_BUF[5]=DIGI[12];
//P2=0x01;
//P1=DIGI[j];
//Loop_Delay
(1);
//P2=0x02;
//P1=DIGI[i];
//Loop_Delay
(1);
//P1=0xFF;
}
while((l<500)&&((P3&0x0f)==KEY[j]))
{
Loop_Delay
(1);
l++;
}
}
if((KeyValue==10)&&(f<1000))
{
/*设计步进间隔*/
f=f+100;
FrequencyControl=10000/f;
/*数码管显示当前频率*/
LED_BUF[0]=DIGI[0];
LED_BUF[1]=DIGI[0];
LED_BUF[2]=DIGI[(f/100)];
KeyValue=16;
}
if((KeyValue==11)&&(f>100))
{
/*设计步退间隔*/
f=f-100;
FrequencyControl=10000/f;
/*数码管显示当前频率*/
LED_BUF[0]=DIGI[0];
LED_BUF[1]=DIGI[0];
LED_BUF[2]=DIGI[(f/100)];
KeyValue=16;
}
if(KeyValue<10)
{
LED_BUF[(2-KeyTime)]=DIGI[KeyValue];
switch(KeyTime)
{
case(0):
KeyBuffer=KeyBuffer+KeyValue*100;break;
case
(1):
KeyBuffer=KeyBuffer+KeyValue*10;break;
case
(2):
KeyBuffer=KeyBuffer+KeyValue*1;break;
}
KeyTime++;
if(KeyTime==3)
{
KeyTime=0;
}
KeyValue=16;
}
if(KeyValue==12)
{
f=KeyBuffer;
FrequencyControl=10000/f;
KeyValue=16;
KeyBuffer=0;
//LED_BUF[0]=DIGI[10];
//LED_BUF[1]=DIGI[10];
//LED_BUF[2]=DIGI[10];
}
//P1=0xFF;
}
}
#endif
////////////////////////////////////////////////////////
//前台程序冻结
//while
(1);
}
////////////////////////////////////////////////////////
voidt0_isr(void)interrupt1//定时器0中断服务程序
{
staticunsignedintcnt=0;
staticunsignedcharled_cnt=0;
TP0=~TP0;//TP0翻转,用来指示中断触发频率或周期
TP1=1;//TP1置高,TP1的高电平持续时间代表中断服务程序执行时间
/*设计阶梯波的阶梯数*/
BreakTime++;
if(BreakTime>=(FrequencyControl/4))
{
DAC0H=SIN[abc];//DAC0输出锯齿波,递增
SamplingControl=SamplingControl+8;
if(SamplingControl==256)
{
SamplingControl=0;
}
BreakTime=0;
}
DAC1H--;//DAC1输出锯齿波,递减
//每十次中断执行一次以下代码,扫描一位LED
if(cnt==10)
{
cnt=0;
switch(led_cnt)
{
case0:
P2=0x01;
P1=LED_BUF[0];
led_cnt=1;
break;
case1:
P2=0x02;
P1=LED_BUF[1];
led_cnt=2;
break;
case2:
P2=0x04;
P1=LED_BUF[2];
led_cnt=3;
break;
case3:
P2=0x08;
P1=LED_BUF[3];
led_cnt=4;
break;
case4:
P2=0x10;
P1=LED_BUF[4];
led_cnt=5;
break;
case5:
P2=0x20;
P1=LED_BUF[5];
led_cnt=0;
break;
default:
break;
}
cnt++;
}
else
{
cnt++;
}
TP1=0;//TP1置低,TP1的高电平持续时间代表中断服务程序执行时间
}
/*按键控制*/
voidKeyDown(void)
{
chara=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!
=0x0f)//读取按键是否按下
{
Delay10ms();//延时10ms进行消抖
if(GPIO_KEY!
=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;break;
case(0X0b):
KeyValue=1;break;
case(0X0d):
KeyValue=2;break;
case(0X0e):
KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue;break;
case(0Xb0):
KeyValue=KeyValue+4;break;
case(0Xd0):
KeyValue=KeyValue+8;break;
case(0Xe0):
KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!
=0xf0))//检测按键松手检测
{
Delay10ms();
a++;
}
}
}
}
voidDelay10ms(void)//误差0us
{
unsignedcha
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子系统设计 天津大学 电子 系统 设计 实验 报告 部分