虚拟信号发生器设计Word下载.docx

上传人:b****2 文档编号:2949445 上传时间:2023-05-01 格式:DOCX 页数:23 大小:456.13KB
下载 相关 举报
虚拟信号发生器设计Word下载.docx_第1页
第1页 / 共23页
虚拟信号发生器设计Word下载.docx_第2页
第2页 / 共23页
虚拟信号发生器设计Word下载.docx_第3页
第3页 / 共23页
虚拟信号发生器设计Word下载.docx_第4页
第4页 / 共23页
虚拟信号发生器设计Word下载.docx_第5页
第5页 / 共23页
虚拟信号发生器设计Word下载.docx_第6页
第6页 / 共23页
虚拟信号发生器设计Word下载.docx_第7页
第7页 / 共23页
虚拟信号发生器设计Word下载.docx_第8页
第8页 / 共23页
虚拟信号发生器设计Word下载.docx_第9页
第9页 / 共23页
虚拟信号发生器设计Word下载.docx_第10页
第10页 / 共23页
虚拟信号发生器设计Word下载.docx_第11页
第11页 / 共23页
虚拟信号发生器设计Word下载.docx_第12页
第12页 / 共23页
虚拟信号发生器设计Word下载.docx_第13页
第13页 / 共23页
虚拟信号发生器设计Word下载.docx_第14页
第14页 / 共23页
虚拟信号发生器设计Word下载.docx_第15页
第15页 / 共23页
虚拟信号发生器设计Word下载.docx_第16页
第16页 / 共23页
虚拟信号发生器设计Word下载.docx_第17页
第17页 / 共23页
虚拟信号发生器设计Word下载.docx_第18页
第18页 / 共23页
虚拟信号发生器设计Word下载.docx_第19页
第19页 / 共23页
虚拟信号发生器设计Word下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

虚拟信号发生器设计Word下载.docx

《虚拟信号发生器设计Word下载.docx》由会员分享,可在线阅读,更多相关《虚拟信号发生器设计Word下载.docx(23页珍藏版)》请在冰点文库上搜索。

虚拟信号发生器设计Word下载.docx

图2.3GUI界面示意图

第三章单片机模块基本原理

3.1发光二极管

图3.1.1LED原理图

图3.1.2LED程序流程图

本实验74LS245的片选地址为CSO,即8000H,读这个地址,就是从74LS245读回开关的值。

可以用单步的方式执行程序,改变开关状态,观察读回的值。

实验仪上装有8只发光二极管及相应驱动电路。

L0-L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。

我们可以通过P0口对其直接进行控制,点亮或者熄灭发光二极管。

3.216*16点阵

图3.2.1点阵原理图

图3.2.2点阵程序流程图

16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。

每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。

每次显示一行,10ms后再显示下一行。

3.3数码管

图3.3.1数码管原理图

图3.3.2数码管程序流程图

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片

74LS374输出。

位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

本实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。

此处X是由KEY/LEDCS决定,参见地址译码。

做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H。

3.4蜂鸣器

图3.4.1蜂鸣器原理图

图3.4.1蜂鸣器程序流程图

本实验采用的继电器其控制电压是5V,控制端为高电平时,继电器工作常开触点吸合,连触点的LED灯被点亮。

当控制端为低电平时,继电器不工作。

执行时,对应的LED将随继电器的开关而亮灭。

3.5串口通信

图3.5.1串口原理图

图3.5.2串口程序流程图

用串并转换方法扩展I/O口。

串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。

在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特率固定为晶振频率Fosc/12。

对于80C196CPU波特率为Fosc/2(B+1),Fosc为晶振频率,B为波特率常数。

由软件置位串行控制寄存器的允许接收位(REN)后,才启动串行接收。

待8位数据收完后,硬件将状态寄存器的RI位置1,RI必须由软件清零。

用串行口工作方式0读入数据,是自动移位完成的,用P1端口串行读入数据时,要编程输出时钟信号,移位读入数据。

对于80C196用串口发数据时要将IOC1.5置1,选择P2.0脚为TXD功能。

同时注意用P1口输出位信号时,需要用到‘与’‘或’运算得到相应位。

第四章系统整体调试结果及说明

利用Matlab设计虚拟信号发生器。

在PC机显示不同信号波形的同时,利用串行口控制单片机系统的LED显示相应波形参数:

幅度、频率、相位和采样频率。

图4.1

第五章课设心得及总结

通过本次课程设计,我对单片机的一些内部结构和功能有了更深层次的了解。

懂得了如何去设计硬件电路,如何编程,如何将信号处理与单片机结合起来综合应用,把知识运用到设计和创新,它不仅仅是让我们把理论知识与实践相结合起来,提高自己的实际动手能力和独立思考能力,更重要是的是同学间的团结合作,个人的能力是有限的,团结才能有力量,我们都尽自己所能来完成这次课程设计。

这是对我们所学的课本知识的测验,也是对是否能快速吸收新的知识的一种考验,在自己亲自操作的时候,才能体验到它具有的挑战性,才能达到我们想要的结果。

所以,在以后的学习和其它课程设计的时候,我们一定要细心的检查并发现、解决问题。

在课设过程中遇到了很多不懂的地方,要是没有学长耐心的指导我不能完全理解这些程序,也不能做的这么快。

这里真心的谢谢老师给予我们的帮助。

同时感谢同伴的帮助。

从查资料,设计编程,模拟仿真,再把与这次课程设计有关的资料汇总在WORD中,直至打印出来,到我们满意。

我感到收获巨大。

参考文献

1)《微型计算机控制系统》赖寿宏,机械工业出版社(教材)

2)《单片机及应用》李大友,高等教育出版社(教材)

附录:

#include<

reg51.h>

#defineLEDLen6

#defineucharunsignedchar

#defineuintunsignedint

xdataunsignedcharRowLow_at_0xb002;

//行低八位地址

xdataunsignedcharRowHigh_at_0xb003;

//行高八位地址

xdataunsignedcharColLow_at_0xb000;

//列低八位地址

xdataunsignedcharColHigh_at_0xb001;

//列高八位地址

xdataunsignedcharOUTBIT_at_0x8002;

//位控制口

xdataunsignedcharOUTSEG_at_0x8004;

//段控制口

xdataunsignedcharIN_at_0x8001;

//键盘读入口

xdataunsignedcharCS273_at_0x9000;

sbitSpeaker=P1^0;

ucharj,a;

uints=0;

ucharLEDBuf[LEDLen];

//显示缓冲

ucharRcvBuf;

//接收缓冲

bitHasRcv=0;

//接收标志

codeucharLEDMAP[]={//八段管显示码

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

codeucharFont[][32]={

//幅

0x00,0x20,0x02,0x22,0xFE,0x23,0x22,0x22,0x22,0xBA,0xFE,0xAB,0x22,0xAA,0xFE,0xAB,

0x00,0xA8,0xFC,0xA9,0x04,0xA9,0x04,0xA9,0xFC,0xF9,0x00,0x20,0xFE,0x23,0x00,0x20,

//值

0x00,0x20,0xFE,0x2F,0x08,0x22,0x08,0x22,0xF8,0x23,0x08,0x22,0xF8,0x23,0x08,0x22,

0xF8,0xA3,0x08,0x62,0xF8,0x33,0x80,0x20,0x40,0x10,0xFC,0x17,0x60,0x18,0x40,0x10,

//频

0x00,0x00,0x02,0xC3,0x86,0x20,0x48,0x10,0x50,0x08,0xA4,0x84,0xA4,0x4A,0xA4,0x4A,

0xA4,0x08,0xA4,0x00,0x84,0xFE,0xFC,0x48,0x40,0x48,0x20,0x4E,0xFE,0x08,0x00,0x08,

//率

0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0xFF,0x20,0x01,0xC4,0x47,0x48,0x22,

0x10,0x11,0x80,0x04,0xD0,0x17,0x28,0x22,0x00,0x41,0xFE,0x7F,0x00,0x01,0x00,0x02,

//相

0x84,0x10,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x90,0xFC,0x50,0x84,0x52,

0x84,0x32,0x84,0x34,0xFC,0x18,0x84,0xFE,0x84,0x10,0x84,0x10,0xFC,0x10,0x00,0x10,

//位

0x00,0x00,0x00,0x10,0xFE,0x1F,0x40,0x10,0x20,0x10,0x20,0x11,0x20,0x11,0x10,0x91,

0x10,0x52,0x18,0x52,0x10,0x34,0x00,0x20,0xFC,0x17,0x40,0x10,0xC0,0x0C,0x00,0x09,

//采

0x00,0x01,0x00,0x01,0x04,0xC1,0x0E,0x31,0x18,0x09,0x20,0x05,0x40,0x03,0x80,0x01,

0xFE,0x7F,0x00,0x01,0xA0,0x08,0x10,0x11,0x10,0x00,0x00,0x7E,0xF8,0x01,0x00,0x00,

//样

0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0xFE,0x13,0x20,0x90,0x20,0x50,

0x20,0x54,0xFC,0x39,0x20,0x30,0x20,0x10,0xFE,0xFD,0x90,0x10,0x88,0x10,0x08,0x11,

voidDelay(uchart)

{

uchari;

while(t--!

=0)

for(i=100;

i!

=0;

i--);

}

voiddisply1()//16x16点阵显示

ucharcount;

uintbitmask;

//uintnum;

//清屏

ColLow=0xff;

//行驱动低有效

ColHigh=0xff;

RowLow=0x00;

//列驱动高有效

RowHigh=0x00;

if(s<

2)

{for(j=0;

j<

2;

j++)

{

for(count=0;

count<

50;

count++)

bitmask=0x01;

for(i=0;

i<

16;

i++)

//首先清屏

RowHigh=0x00;

ColLow=~Font[j][i*2];

//写出一行数据

ColHigh=~Font[j][i*2+1];

RowLow=bitmask&

0xff;

//点亮此行

RowHigh=bitmask>

>

8;

bitmask<

<

=1;

//移位,指向下一行

Delay

(1);

}

ColHigh=0xff;

if((s>

=2)&

&

(s<

3))

for(j=2;

4;

j++)

=3)&

4))

for(j=4;

6;

=4)&

5))

{for(j=6;

10;

voidSerialIO0()interrupt4

if(RI)

RI=0;

RcvBuf=SBUF;

HasRcv=1;

//Speaker=0;

Delay(100);

s++;

if(s>

=5)

s=0;

else

TI=0;

voidDisplayLED()

ucharPos;

ucharLED;

Pos=0x20;

//从左边开始显示

for(i=0;

i<

LEDLen;

i++)

OUTBIT=0;

//关所有八段管

LED=LEDBuf[i];

OUTSEG=LED;

OUTBIT=Pos;

//显示一位八段管

Pos>

//显示下一位

codeucharKeyTable[]={//键码定义

0x16,0x15,0x14,0xff,

0x13,0x12,0x11,0x10,

0x0d,0x0c,0x0b,0x0a,

0x0e,0x03,0x06,0x09,

0x0f,0x02,0x05,0x08,

0x00,0x01,0x04,0x07

unsignedcharTestKey()

//输出线置为0

return(~IN&

0x0f);

//读入键状态(高四位不用)

/*unsignedcharGetKey()

//unsignedcharj;

uchark;

i=6;

//找出键所在列

do{

OUTBIT=~Pos;

k=~IN&

0x0f;

}while((--i!

=0)&

(k==0));

//键值=列X4+行

if(k!

=0){

i*=4;

if(k&

2)

i+=1;

elseif(k&

4)

i+=2;

8)

i+=3;

doDelay(10);

while(TestKey());

//等键释放

return(KeyTable[i]);

//取出键码

}elsereturn(0xff);

}*/

voidmain()

CS273=0;

IE=0x00;

//DISABLEALLINTERRUPT

TMOD=0x20;

//定时器1工作于方式2(8位重装)

TH1=0xF9;

//2400BPS@12MHz

TL1=0xF9;

PCON&

=0x7F;

//SMOD位清零

SCON=0x50;

//串行口工作方式设置

LEDBuf[0]=0xff;

LEDBuf[1]=0xff;

LEDBuf[2]=0xff;

LEDBuf[3]=0xff;

LEDBuf[4]=0xf0;

LEDBuf[5]=0x00;

TR1=1;

ES=1;

EA=1;

HasRcv=0;

while

(1)

if(HasRcv)

Speaker=0;

CS273=SBUF;

disply1();

LEDBuf[5]=LEDMAP[RcvBuf&

0x0f];

//a=RcvBuf&

0xf0;

//a>

=4;

//LEDBuf[4]=LEDMAP[RcvBuf&

0xf0];

Speaker=1;

DisplayLED();

/*if(TestKey())

SBUF=GetKey();

}*/

}

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

当前位置:首页 > 工作范文 > 行政公文

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

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