函数发生器界面设计.docx
- 文档编号:6257781
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:21
- 大小:221.97KB
函数发生器界面设计.docx
《函数发生器界面设计.docx》由会员分享,可在线阅读,更多相关《函数发生器界面设计.docx(21页珍藏版)》请在冰豆网上搜索。
函数发生器界面设计
一、设计总体思路、基本原理和整体框图:
1、总体思路及基本原理:
该课题是应用所学的DSP知识,编写程序,实现一个函数发生器的控制界面。
实验设备为达盛DSP实验箱,控制界面要求有三种波形(正弦波,文波和锯齿波)可供选择,从实验箱上的键盘输入数字进行选择,并在实验箱上的LCD液晶显示器上显示出来。
利用DSP芯片在LCM12864ZK显示出界面,芯片HD7279控制键盘输入。
因此还需要对上述芯片进行深入的了解,熟知其工作原理和指令系统。
实验用于程序编译的软件为CCS3.1。
显示程序写入DSP芯片TMS320VC5410,指令可以用C语言或汇编语言来编写,考虑到C语言的功能较汇编语言强且可读性好,这里采用C语言编写。
键盘输入由芯片HD7279控制,HD7279具有串行接口,可同时驱动8位共阴式数码管或64只独立的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示,键盘接口的全部功能。
HD7279内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。
HD7279具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。
液晶显示LCM12864ZK的内部DDRAM含8192个16*16点中文字型和128个16*8半宽的字母符号字型;另外绘图显示画面提供一个64*256点的绘图区域GDRAM;而且内含CGRAM提供4组可编程的16*16点阵造字功能。
这里,我们只用到了含有显示汉字功能的DDRAM,其地址范围在后面的资料里有详细说明。
2、整体框图:
二、单元函数设计:
1、LCD显示驱动:
LCD显示时需要将特定的字在特定的位置显示出来,这就要求为将要显示的汉字指定固定的位置地址。
驱动程序框图如右:
程序如下:
fill_chinese_word.asm
.globalfill_chinese_word
.refwrite_command,write_data
fill_chinese_word:
;turnoffdisplay
stm#08h,ar5
callwrite_command
;clearddram
stm#01h,ar5
callwrite_command
;turnondisplay
stm#0ch,ar5
callwrite_command
;setdisplayaddress
stm#80h,ar5;setdisplayaddress
callwrite_command
;调用中文字库代码,显示汉字
stm#0c7h,ar5
mvdkar5,1023h
callwrite_data
stm#0ebh,ar5
mvdkar5,1023h
callwrite_data;请
stm#0d1h,ar5
mvdkar5,1023h
callwrite_data
stm#0a1h,ar5
mvdkar5,1023h
callwrite_data;选
stm#0d4h,ar5
mvdkar5,1023h
callwrite_data
stm#0f1h,ar5
mvdkar5,1023h
callwrite_data;择stm#0b2h,ar5
mvdkar5,1023h
callwrite_data
stm#0a8h,ar5
mvdkar5,1023h
callwrite_data;波
stm#0d0h,ar5
mvdkar5,1023h
callwrite_data
stm#0ceh,ar5
mvdkar5,1023h
callwrite_data;形
;setdisplayaddress
stm#91h,ar5;setdisplayaddress
callwrite_command
stm#0a3h,ar5
mvdkar5,1023h
callwrite_data
stm#0b1h,ar5
mvdkar5,1023h
callwrite_data;1.
;setdisplayaddress
stm#93h,ar5;setdisplayaddress
callwrite_command
stm#0d5h,ar5
mvdkar5,1023h
callwrite_data
stm#0fdh,ar5
mvdkar5,1023h
callwrite_data;正
stm#0cfh,ar5
mvdkar5,1023h
callwrite_data
stm#0d2h,ar5
mvdkar5,1023h
callwrite_data;弦
stm#0b2h,ar5
mvdkar5,1023h
callwrite_data
stm#0a8h,ar5
mvdkar5,1023h
callwrite_data;波
;setdisplayaddress
stm#89h,ar5;setdisplayaddress
callwrite_command
stm#0a3h,ar5
mvdkar5,1023h
callwrite_data
stm#0b2h,ar5
mvdkar5,1023h
callwrite_data;2.
;setdisplayaddress
stm#8bh,ar5;setdisplayaddress
callwrite_command
stm#0b7h,ar5
mvdkar5,1023h
callwrite_data
stm#0bdh,ar5
mvdkar5,1023h
callwrite_data;方
stm#0b2h,ar5
mvdkar5,1023h
callwrite_data
stm#0a8h,ar5
mvdkar5,1023h
callwrite_data;波
;setdisplayaddress
stm#99h,ar5;setdisplayaddress
callwrite_command
stm#0a3h,ar5
mvdkar5,1023h
callwrite_data
stm#0b3h,ar5
mvdkar5,1023h
callwrite_data;3
stm#9bh,ar5;setdisplayaddress
callwrite_command
stm#0beh,ar5
mvdkar5,1023h
callwrite_data
stm#0e2h,ar5
mvdkar5,1023h
callwrite_data;锯
stm#0b3h,ar5
mvdkar5,1023h
callwrite_data
stm#0ddh,ar5
mvdkar5,1023h
callwrite_data;齿
stm#0b2h,ar5
mvdkar5,1023h
callwrite_data
stm#0a8h,ar5
mvdkar5,1023h
callwrite_data;波
bfill_chinese_word;test
ret
2、键盘连接驱动:
从键盘输入数字时要完成下列步骤:
1、按键的识别,即确定是否有按键按下。
首先DSP通过写键盘端口输出00000到键盘的行线,然后通过读键盘端口输入,检测键盘的列线信号。
若没有按键按下,则输入的列线信号为111。
若有按键按下,则输入的信号不为111。
2、行扫描确定按键的位置,行扫描是指依次给每条行线输出0信号,而其余行线输出1信号,并检测每次扫描所对应的列线信号。
每次给行线输出的信号称为行代码Xi,而检测到的列线信号称为列代码Yi。
若某行有按键按下,并扫描到该行时,则从读键盘端口检测到的列线信号为0,否则为1。
在扫描的过程中,只要记下列信号不为全1时的行代码和列代码,就能确定按键的位置。
3、按键防抖,检测到有按键按下后,延时10~20ms,然后再进行行扫描。
4、键码产生,经过行扫描后,就能确定按键的键码。
键码是由行代码和列代码组合而成。
程序流程图如右:
程序如下:
ExternvoidInitC5402(void);
externvoidInitMcBSP0(void);
externvoidms_delay(int);
externvoidsend_0(void);
externvoidsend_1(void);
externvoidsend_2(void);
externvoidsend_end(void);
externvoidINT3_ISR(void);
externvoid_fill_chinese_word(void);
voidsend_byte(unsignedcharout_byte);
voidwrite7279(unsignedintcmd,unsignedintdta);
voidlong_delay(void);
voidshort_delay(void);
interruptvoidkey_int();
unsignedintkey_a;
/******MainFunctionProgram******/
#defineCMD_RESET0xa4
#defineCMD_TEST0xbf
#defineDECODE00x80
#defineDECODE10xc8
#defineCMD_READ0x15
#defineUNDECODE0x90
#defineRTL_CYCLE0xa3
#defineRTR_CYCLE0xa2
#defineRTL_UNCYL0xa1
#defineRTR_UNCYL0xa0
#defineACTCTL0x98
#defineSEGON0xe0
#defineSEGOFF0xc0
#defineBLINKCTL0X88
#defineINPUT0x111
unsignedintbyteout;
chara,b;
voidmain(void)
{unsignedchari;
//unsignedcharj;
InitC5402();
InitMcBSP0();
ms_delay(25);
Write_lcd();
//fill_chinese_word();
asm("STM#0x6900,ST1");
send_byte(CMD_TEST);//cmd_test=0xbf
long_delay();
send_byte(CMD_RESET);//cmd_reset=0xa4
long_delay();
for(i=0;i<16;i++)
{
write7279(DECODE0,i);//(0x80,i)
long_delay();
send_byte(RTL_UNCYL);//0xa1,左移
long_delay();
}
long_delay();
for(i=16;i>0;i--)
{
write7279(DECODE0+7,i);
long_delay();
send_byte(RTR_UNCYL);
long_delay();
}
long_delay();
while
(1)
{
//Write_lcd();
}
}
voidsend_byte(unsignedcharout_byte)
{
unsignedchari;
send_0();
for(i=0;i<8;i++)
{
if(out_byte&0x80)
{
send_1();
}
else
{
send_2();
}
out_byte=out_byte*2;
}
}
voidwrite7279(unsignedintcmd,unsignedintdta)
{
unsignedchari;
unsignedintcmddata;
asm("NOP");
asm("NOP");
asm("NOP");
dta=(dta&0x00ff);
asm("NOP");
asm("NOP");
asm("NOP");
cmddata=((cmd<<8)|dta);
asm("NOP");
asm("NOP");
asm("NOP");
send_0();
for(i=0;i<16;i++)
{if(cmddata&0x8000)
{send_1();
}
else
{
send_2();
}
cmddata=cmddata*2;
}
send_end();
}
voidlong_delay(void)
{
unsignedchari,j;
for(i=0;i<0xfff;i++)
{
for(j=0;j<0x50;j++)
{}
}
}
voidshort_delay(void)
{
unsignedchari,j;
for(i=0;i<0x10;i++)
{for(j=0;j<0x100;j++)
{}
}
}
interruptvoidkey_int()
{
asm("NOP");
INT3_ISR();
asm("NOP");
asm("NOP");
asm("NOP");
key_a=*(unsigned*)0x15;
asm("NOP");
asm("NOP");
asm("NOP");
send_byte(RTL_UNCYL);
write7279(DECODE0,key_a);
if(key_a==0xf)
{
main();
}
}
三、程序调式:
调试步骤
⑴.拔码开关S22的设置:
1—OFF,2—ON;
⑵.正确完成计算机、DSP仿真器和实验箱的连接后,系统上点;
⑶.启动CCS.5000,用Project/Open打开”key-7279.out”工程文件;双击”key-7279.pit”及"Source"查看各源程序;并加载”key-7279.out”,单击“Run”运行程序,然后观察结果。
运行程序后实验箱上LCD的界面为:
四、心得体会:
被分到做基于DSP技术的那个课题组时感觉很无奈,当时老师讲课自己就没怎么听,真的唯独DSP这门,其他像单片机,EDA都还花了不少心思。
刚拿到课题,没有半点思路,不知要从何开始,更不提用什么方法。
找了一些资料,搬出很久没动过的DSP教材,几天下来也还有了点头绪,只是很难写也程序,在老师的指导下将那个用C语言编写的按键控制程序和用汇编语言写的显示程序综合在了一起,虽然要改的不多,我也花了不少的时间,感觉收获还有不小,起码证明了自己的自学能力,呵呵。
通过这次课程设计,把以前没有掌握的课本知识又重新学习了一遍,更重要的是学会了用DSP设计一个简单系统的方法,这对今后的学习工作都有着很大的帮助,有助于系统的理解了编译原理程序构造的一般原理和基本实现方法。
把学过的计算机编译原理以及相关课程的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解和对自己动手能力的提高。
这次课程设计让我学会了如何用软件CCS3.1(CCS5000)进行简单的DSP工程调式,想以前DSP实验的时候,老师讲它的用法怎么也听不明白,看来对于我们学工科的凡事还是得自己动动手来的快。
五、参考文献:
1:
DSP原理及应用邹彦主编电子工业出版社
2:
C语言程序设计蒋清明主编人民邮电出版社
3:
C54xx硬件原理设计
4:
DSP集成开发环境:
CCS及DSP_BIOS的原理
5:
TMS320VC5402Fixed-PointDigitalSignalProcessor
6:
CCS技术
六、附录:
1、带中文字库图形液晶显示模块LCM12864ZK说明书:
设定DDRAM位址:
CODE
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0
设定DDRAM地址到位地址计数器(AC)
第一行AC范围为:
80H-87H;
第二行AC范围为:
90H-97H;
第三行AC范围为:
88H-8FH;
第四行AC范围为:
98H-9FH;
2、HD7279A串行接口8位LED数码管及64键键盘智能控制芯片资料:
七、总程序清单:
externvoidInitC5402(void);
externvoidInitMcBSP0(void);
externvoidms_delay(int);
externvoidsend_0(void);
externvoidsend_1(void);
externvoidsend_2(void);
externvoidsend_end(void);
externvoidINT3_ISR(void);
externvoid_fill_chinese_word(void);
voidsend_byte(unsignedcharout_byte);
voidwrite7279(unsignedintcmd,unsignedintdta);
voidlong_delay(void);
voidshort_delay(void);
interruptvoidkey_int();
/********************MainFunctionProgram*********************/
#defineCMD_RESET0xa4
#defineCMD_TEST0xbf
#defineDECODE00x80
#defineDECODE10xc8
#defineCMD_READ0x15
#defineUNDECODE0x90
#defineRTL_CYCLE0xa3
#defineRTR_CYCLE0xa2
#defineRTL_UNCYL0xa1
#defineRTR_UNCYL0xa0
#defineACTCTL0x98
#defineSEGON0xe0
#defineSEGOFF0xc0
#defineBLINKCTL0X88
#defineINPUT0x111
unsignedintbyteout;
unsignedintkey_a;
chara,b;
voidmain(void)
{unsignedchari;
unsignedcharyy1[16][3]={{0x80,0xc7,0xeb},{0x81,0xd1,0xa1},{0x82,0xd4,0xf1},{0x83,0xb2,0xa8},{0x84,0xd0,0xce},{0x90,0xa3,0xb1},{0x92,0xd5,0xfd},{0x93,0xcf,0xd2},{0x94,0xb2,0xa8},{0x88,0xa3,0xb2},{0x8A,0xb7,0xbd},{0x8B,0xb2,0xa8},{0x98,0xa2,0xb3},{0x9A,0xbe,0xe2},{0x9B,0xb3,0xdd},{0x9B,0xb2,0xa8}};
unsignedcharyy2[11][3]={{0x80,0xb5,0xb1},{0x81,0xc7,0xb0},{0x82,0xb2,0xa8},{0x83,0xd0,0xce},{0x85,0xd5,0xfd},{0x86,0xcf,0xd2},{0x87,0xb2,0xa8},{0x90,0xc6,0xb5},{0x91,0xc2,0xca},{0x96,0xa3,0xc8},{0x97,0xa3,0xfa}};
unsignedcharyy3[10][3]={{0x80,0xb5,0xb1},{0x81,0xc7,0xb0},{0x82,0xb2,0xa8},{0x83,0xd0,0xce},{0x85,0xb7,0xbd},{0x87,0xb2,0xa8},{0x90,0xc6,0xb5},{0x91,0xc2,0xca},{0x96,0xa3,0xc8},{0x97,0xa3,0xfa}};
unsignedcharyy4[11][3]={{0x80,0xb5,0xb1},{0x81,0xc7,0xb0},{0x82,0xb2,0xa8},{0x83,0xd0,0xce},{0x85,0xbe,0xe2},{0x86,0xb3,0xdd},{0x87,0xb2,0xa8},{0x90,0xc6,0xb5},{0x91,0xc2,0xca},{0x96,0xa3,0xc8},{0x97,0xa3,0xfa}};
//unsignedcharj;
InitC5402();
InitMcBSP0();
ms_delay(25);
Write_lcd();
//fill_chinese_word();
asm("STM#0x6900,ST1");
send_byte(CMD_TEST);//cmd_test=0xbf
long_delay();
send_byte(CMD_RESET);//cmd_reset=0xa4
long_delay();
for(i=0;i<16;i++)
{
write7279(DECODE0,i);//(0x80,i)
long_delay();
send_byte(RTL_UNCYL);//0xa1,左移
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 发生器 界面设计