dsp经典实例.docx
- 文档编号:24296766
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:55
- 大小:447.42KB
dsp经典实例.docx
《dsp经典实例.docx》由会员分享,可在线阅读,更多相关《dsp经典实例.docx(55页珍藏版)》请在冰豆网上搜索。
dsp经典实例
课程设计(综合实验)报告
(2009--2010年度第二学期)
名称:
DSP系统课程设计
题目:
液晶翻屏显示设计
院系:
电子与通信工程系
班级:
电子0702班
学号:
200703020201
学生姓名:
白羽峰
指导教师:
尚秋峰、姚国珍
设计周数:
1周
成绩:
日期:
2010年7月
液晶翻屏显示设计
一、实验要求:
使用基于C语言的软件编程,在实验板上的液晶上实现翻屏显示五屏不同画面,定义两个按键,实现翻屏控制。
二、实验目的:
1、通过本次课程设计,要求基本掌握在CCS环境下进行编程及调试。
2、通过本次实验,了解和掌握5402芯片上外设(如配置IO口控制LED显示、了解7279芯片的功能及其结合数码管和编码键盘的编程、掌握LCD字符的写入等)的功能以及其编程应用。
三、实验思路:
通过读入编码键盘键值(rece_buff)的不同进行上翻和下翻的判断并且执行相应操作,同时定义一个变量cont进行必要的计数(根据键值的不同),再通过摁键后对键值和cont值的同时判断,确定液晶上不同内容的输入,从而实现翻屏功能(翻屏后出现不同诗句)。
四、实验主要源代码如下:
#include"DspRegDefine.h"//VC5402寄存器定义
#defineUCHARunsignedchar
#defineUINT16unsignedint
#defineUINT32unsignedlong
#defineTRUE1
#defineFALSE0
//---------------HD7279A指令-----------------------------
#defineCMD_RESET0xa4//复位
#defineCMD_TEST0xbf//测试
#defineRTL_UNCYL0xa1//左移
#defineRTR_UNCYL0xa0//右移
#defineRTL_CYCLE0xa3//循环左移
#defineRTR_CYCLE0xa2//循环右移
#defineDECODE00x80//下载数据按方式0译码
#defineDECODE10xc8//下载数据按方式1译码
#defineUNDECODE0x90//下载数据但不译码
#defineBLINKCTL0x88//闪烁控制
#defineACTCTL0x98//消隐控制
#defineSEGON0xe0//段点亮
#defineSEGOFF0xc0//段关闭
#defineCMD_READ0x15//读键盘数据
//---------------LCD指令-----------------------------
//基本指令集RE=0
#defineCLEAR0x0001//清除显示00000000
#defineRESAC0x0002//位址歸位00000010
#defineSETPOINT0x0006//進入點設定,游標右移,DDRAM位址計數器(AC)加100000110
#defineCURSOR0x000F//整體顯示,游標顯示,游標位置反白00001111
#defineMCURSOR0x0014//游標向右移動,AC=AC+100010010
#defineFUCSET0x0030//功能設定,BITMPU控制界面,基本指令集,默认设置
#defineCGRAMAC0x0040//設定CGRAM位址
#defineDDRAMAC0x0080//設定DDRAM位址
//擴充指令集RE=1
#defineIDLE0x01//待命模式
#defineCGRAMSET0x02//捲動位址或RAM位址選擇
#defineREVERSE0x04//反白選擇
#defineSLEEP0x0c//脫離睡眠模式
#defineEFUCSET0x66//擴充功能設定,8BITMPU控制界面,為擴充指令集動作,繪圖顯示ON
#defineSISA0x40//設定IRAM位址或捲動位址
#defineSETGDRAM0x80//設定繪圖RAM位址
/*端口定义*/
//---------------------------------------------------------
ioportUINT16port0004;//IO输出地址
ioportUINT16port0002;//串行数据地址
//---------------------------------------------
ioportUINT16port0005;//方向控制
ioportUINT16port0006;//CS7279
ioportUINT16port0007;//CLK7279
ioportUINT16port0008;//DATA7279
ioportUINT16port0009;//KEY7279
//----------------------------------------------------------
/*全局变量定义*/
//---------------------------------------------------------
charsend_buff=0x00;//发送缓冲
charrece_buff=0x00;//接收缓冲
UINT16data_buff=0x0000;//数据缓冲
UINT16cont=0;
UCHARa=3;
UINT16show=0x00aa;
UINT16temp7279;
UINT16key7279;
UCHARc1[10]="白日依山尽";
UCHARc2[10]="黄河入海流";
UCHARc3[10]="欲穷千里目";
UCHARc4[10]="更上一层楼";
UCHARc5[10]="春眠不觉晓";
UCHARc6[10]="处处闻啼鸟";
UCHARc7[10]="夜来风雨声";
UCHARc8[10]="花落知多少";
UCHARc9[10]="锄禾日当午";
UCHARe1[10]="汗滴禾下土";
UCHARe2[10]="谁知盘中餐";
UCHARe3[10]="粒粒皆辛苦";
UCHARe4[10]="床前明月光";
UCHARe5[10]="疑是地上霜";
UCHARe6[10]="举头望明月";
UCHARe7[10]="低头思故乡";
UCHARe9[10]="";
UCHARe8[10]="唐诗学习机";
UCHARc0[10]="欢迎您使用";
UCHARd1[5]="上翻:
";
UCHARd2[5]="下翻:
";
**********************************************************************
***************所使用的函数原型*****************
**********************************************************************
voidcpu_init(void);//初始化CPU
voidxint1_init(void);//外部中断1初始化子程序
interruptvoidint1(void);//中断1中断子程序
externvoiddelay_8us(void);//8us延迟--T2\T3\T6\T7
externvoiddelay_25us(void);//25us延迟--T4\T5
externvoiddelay_50us(void);//50us延迟--T1
voiddelay_1000ms(void);//25ms延迟--复位延迟
voidcs_high(void);//片选置高
voidcs_low(void);//片选置低
voidsend(void);//发送一个字节8BIT
charreceive();//接收一个字节8BIT
voidDelay(UINT16numbers);//长延迟
************************************************************************
***********************函数定义******************
************************************************************************
voidSendByte(UCHARdat)
{
UCHARi;
UINT16temp;
for(i=0;i<8;i++)
{
temp=port0004;//读IO8007SCLK="0";
if(dat&0x0080)
port0002=0;//写IO8006SID="1",发送数据"1"MSB先发送
else
temp=port0002;//读IO8006SID="0",发送数据"0"MSB先发送
port0004=0;//写IO8007SCLK="1";
dat=dat<<1;//数据左移,移位到dat.7
}
temp=port0004;//读IO8007SCLK="0";
}
//--------------------------------------------------------------------
//函数名称:
voidSendCMD(UCHARdat)写指令寄存器
//函数说明:
写指令寄存器
//输入参数:
输入的命令字
//输出参数:
无
//--------------------------------------------------------------------
voidSendCMD(UCHARdat)
{
SendByte(0x00F8);//11111,00,0RW=0,RS=0同步标志
SendByte(dat&0x00F0);//高四位
SendByte((dat&0x000F)<<4);//低四位
}
//--------------------------------------------------------------------
//函数名称:
voidSendDat(UCHARdat)写显示数据或单字节字符
//函数说明:
写数据寄存器
//输入参数:
输入的数据
//输出参数:
无
//--------------------------------------------------------------------
voidSendDat(UCHARdat)
{
SendByte(0x00FA);//11111,01,0RW=0,RS=1
SendByte(dat&0x00F0);//高四位
SendByte((dat&0x000F)<<4);//低四位
}
//--------------------------------------------------------------------
//函数名称:
voidInitlcm(void)
//函数说明:
初始化LCM
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidInitlcm()
{
asm("nop");
delay_1000ms();
SendCMD(FUCSET);//功能設定,8BIT并口,基本指令集
delay_50us();
SendCMD(FUCSET);//功能設定,8BIT并口,基本指令集
delay_50us();
SendCMD(CURSOR);//整體顯示,游標顯示,游標位置反白
delay_50us();
SendCMD(CLEAR);//清除显示
delay_1000ms();
SendCMD(SETPOINT);//進入點設定,游標右移,DDRAM位址計數器(AC)加1
delay_50us();
}
//--------------------------------------------------------------------
//函数名称:
voidcpu_init(void)
//函数说明:
初始化CPU
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidcpu_init(void)
{
asm("nop");
asm("nop");
asm("nop");
*(unsignedint*)CLKMD=0x0;//switchtoDIVmodeclkout=1/2clkin
while(((*(unsignedint*)CLKMD)&01)!
=0);
*(unsignedint*)CLKMD=0x07ff;//switchtoPLLX1mode
*(unsignedint*)PMST=0x3FF2;
*(unsignedint*)SWWSR=0x7fff;
*(unsignedint*)SWCR=0x0001;
*(unsignedint*)BSCR=0xf800;
asm("ssbxintm");//Disableallmaskinterrupts
*(unsignedint*)IFR=0xffff;
asm("nop");
asm("nop");
asm("nop");
}
//--------------------------------------------------------------------
//函数名称:
voidxint1_init(void)
//函数说明:
初始化XINT1
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidxint0_init()//外部中断0初始化子程序
{
*(unsignedint*)IMR=0x0001;//使能int0中断
asm("rsbxINTM");//开总中断
}
//--------------------------------------------------------------------
//函数名称:
voiddelay_25ms(void)
//函数说明:
25ms延迟
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voiddelay_1000ms()
{
UINT16i,j;
for(i=0;i<=1000;i++);
for(j=0;j<=1000;j++);//延迟250*1000*CLKOUT=250000*CLKOUT
//1/CLKOUT=0.1us
}
//--------------------------------------------------------------------
//函数名称:
voidcs_high(void)
//函数说明:
片选置高
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidcs_high()
{
temp7279=port0006;
}
//--------------------------------------------------------------------
//函数名称:
voidcs_low(void)
//函数说明:
片选置低
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
voidcs_low()
{
port0006=0;
}
//--------------------------------------------------------------------
//函数名称:
voidsend(void)
//函数说明:
发送一个字节8BIT,高位在前
//输入参数:
发送数据在全局变量send_buff中
//输出参数:
无
//--------------------------------------------------------------------
voidsend()
{
UINT16i;
cs_low();//片选CS=0
delay_50us();//延时50us
for(i=0;i<8;i++)
{
switch(send_buff&0x80)
{
case0x00:
temp7279=port0008;//7279data低
break;
case0x80:
port0008=0;//7279data高
}
port0007=0;
//7279clk高
delay_8us();
temp7279=port0007;
//7279clk低
delay_8us();
send_buff<<=1;
}
//这时,7279CS=1,7279CLK=0
}
//--------------------------------------------------------------------
//函数名称:
voidreceive(void)
//函数说明:
接收一个字节8BIT,高位在前
//输入参数:
接收到的数据在全局变量rece_buff中
//输出参数:
无
//--------------------------------------------------------------------
//voidreceive()
charreceive()
{
UINT16i;
port0005=0;//DIR配置成输入
asm("nop");
delay_50us();
for(i=0;i<8;i++)
{
//7279clk高
port0007=0;
delay_8us();
key7279=port0009&0x0001;
asm("nop");
//接收到的数据在D0位
data_buff=data_buff|(key7279<<(15-i));
//7279clk低
temp7279=port0007;
delay_8us();
}
asm("nop");//在这里设置断点观察data_buff中的值
rece_buff=(data_buff>>8)&0x00ff;//接收到的数据右移给rece_buff
data_buff=0x0000;//清除data_buff
temp7279=port0005;
//DIR配置成输出
returnrece_buff;
}
//--------------------------------------------------------------------
//函数名称:
voidint1(void)
//函数说明:
中断1的子程序
//输入参数:
无
//输出参数:
无
//--------------------------------------------------------------------
interruptvoidint0()//中断0中断子程序
{
*(unsignedint*)IFR=0xFFFF;//清除所有中断标志,"写1清0"
send_buff=CMD_READ;//读键值指令
send();
receive();
asm("nop");
send_buff=RTL_UNCYL;//数据左移指令
send();
send_buff=DECODE1;
send();
send_buff=rece_buff;//将接收到的键值送显示
send();
switch(rece_buff)
{case0x0004:
a=1;break;
case0x0006:
a=0;break;
}
cs_high();//7279CS置高
asm("rsbxINTM");//开总中断
return;
}
/*
***********************************************************
-函数名称:
voidDelay(intnumbers)
-函数说明:
延时
-输入参数:
numbers
-输出参数:
无
***********************************************************
*/
voidDelay(UINT16numbers)
{
UINT16i,j;
for(i=0;i<40000;i++);
for(j=0;j } /* ***********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 经典 实例