虚拟信号发生器设计Word下载.docx
- 文档编号:2949445
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:23
- 大小:456.13KB
虚拟信号发生器设计Word下载.docx
《虚拟信号发生器设计Word下载.docx》由会员分享,可在线阅读,更多相关《虚拟信号发生器设计Word下载.docx(23页珍藏版)》请在冰点文库上搜索。
图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();
}*/
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 信号发生器 设计