#include〈stdio.h〉
#defineled8(*((unsignedint*)0x200001))
#defineDigital8(*((unsignedint*)0x200002))
#defineLCD_REG(*((unsignedint*)0x200003))
#definebuzzer(*((unsignedint*)0x200004))
#defineUSER_SW(*((unsignedint*)0x200005))
#defineLCD_DATA(*((unsignedint*)0x200006))
#defineUART_BASE_ADDR0x200008
#defineRBR*((int*)(UART_BASE_ADDR+0))
#defineTHR*((int*)(UART_BASE_ADDR+0))
#defineIER*((int*)(UART_BASE_ADDR+1))
#defineIIR*((int*)(UART_BASE_ADDR+2))
#defineFCR*((int*)(UART_BASE_ADDR+2))
#defineLCR*((int*)(UART_BASE_ADDR+3))
#defineMCR*((int*)(UART_BASE_ADDR+4))
#defineLSR*((int*)(UART_BASE_ADDR+5))
#defineMSR*((int*)(UART_BASE_ADDR+6))
#defineSCR*((int*)(UART_BASE_ADDR+7))
#defineDLL*((int*)(UART_BASE_ADDR+0))
#defineDLM*((int*)(UART_BASE_ADDR+1))
#definecomm0
#definedat1
/*要显示的字符*/
unsignedcharstr1[]={"2014-12-30”};
unsignedcharstr2[]={"23-59-55"};
Uint16nian,yue,ri,shi,fen,miao,a;
voidDelay(unsignedintnDelay);
voidwr_lcd(unsignedchardat_comm,unsignedintcontent);
voiddelaynum(unsignedintd_time);
/*锁相环的设置*/
PLL_ConfigmyConfig={
0,//IAI:
thePLLlocksusingthesameprocessthatwasunderway
//beforetheidlemodewasentered
1,//IOB:
IfthePLLindicatesabreakinthephaselock,
//itswitchestoitsbypassmodeandrestartsthePLLphase-locking
//sequence
12,//PLLmultiplyvalue;multiply12times
2//Divideby2PLLdividevalue;itcanbeeitherPLLdividevalue
//(whenPLLisenabled),orBypass-modedividevalue
//(PLLinbypassmode,ifPLLmultiplyvalueissetto1)
};
/*SDRAM的EMIF设置*/
EMIF_Configemiffig={
0x221,//EGCR:
theMEMFREQ=00,theclockforthememoryisequaltocpufrequence
//theWPE=0,forbidenthewritingpostingwhenwedebugtheEMIF
//theMEMCEN=1,thememoryclockisreflectedontheCLKMEMpin
//theNOHOLD=1,HOLDrequestsarenotrecognizedbytheEMIF
0xFFFF,//EMI_RST:
anywritetothisregisterresetstheEMIFstatemachine
0x1fff,//CE3_1:
CE0spacecontrolregister1
0x00ff,//CE3_2:
CE0spacecontrolregister2
0x00ff,//CE3_3:
CE0spacecontrolregister3
0x1fff,//CE1_1:
CE0spacecontrolregister1
//Asynchronous,16Bit
0x00ff,//CE1_2:
CE0spacecontrolregister2
0x00ff,//CE1_3:
CE0spacecontrolregister3
0x1FFF,//CE2_1:
CE0spacecontrolregister1
//Asynchronous,16Bit
0xFFFF,//CE2_2:
CE0spacecontrolregister2
0x00FF,//CE2_3:
CE0spacecontrolregister3
0x1fff,//CE3_1:
CE0spacecontrolregister1
0x00ff,//CE3_2:
CE0spacecontrolregister2
0x00ff,//CE3_3:
CE0spacecontrolregister3
0x2911,//SDC1:
SDRAMcontrolregister1
//TRC=8
//SDSIZE=0;SDWID=0
//RFEN=1
//TRCD=2
//TRP=2
0x0410,//SDPER:
SDRAMperiodregister
//7ns*4096
0x07FF,//SDINIT:
SDRAMinitializationregister
//anywritetothisregistertoinittheallCEspaces,
//doitafterhardwareresetorpoweruptheC55xdevice
0x0131//SDC2:
SDRAMcontrolregister2
//SDACC=0;
//TMRD=01;
//TRAS=0101;
//TACTV2ACTV=0001;
};
/*************以下内容为LCD的读写等函数**************/
TMS320VC5509DSPExternalMemoryInterface(EMIF)ReferenceGuide
*/
//*addr为CPLD寄存器操作专用指针
voiddelay(unsignedintd_time)
{
while(d_time—-);
}
main()
{
inttemp,k;
CSL_init();
CHIP_RSET(XBSR,0x0a01);
PLL_config(&myConfig);
EMIF_config(&emiffig);
a=20;
nian=14;
yue=12;
ri=31;
shi=23;
fen=59;
miao=55;
wr_lcd(comm,0x01);//清屏指令
wr_lcd(comm,0x38);//设定LCD为16*2,5*7矩阵,8位数据接口
wr_lcd(comm,0x0f);//显示ON光标ON,闪烁ON
wr_lcd(comm,0x06);//文字不动,光标
while
(1)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
if(ri==32)
{
ri=1;
yue++;
if(yue==13)
{
yue=1;
nian++;
if(nian==99)
{
nian=0;
a++;
}
}
}
}
}
}
str1[0]=a/10+0x30;
str1[1]=a%10+0x30;
str1[2]=nian/10+0x30;
str1[3]=nian%10+0x30;
str1[4]=’-';
str1[5]=yue/10+0x30;
str1[6]=yue%10+0x30;
str1[7]=’—';
str1[8]=ri/10+0x30;
str1[9]=ri%10+0x30;
str2[0]=shi/10+0x30;
str2[1]=shi%10+0x30;
str2[2]=’:
';
str2[3]=fen/10+0x30;
str2[4]=fen%10+0x30;
str2[5]=':
';
str2[6]=miao/10+0x30;
str2[7]=miao%10+0x30;
wr_lcd(comm,0x80);//第一行字符地址
for(k=0;k〈10;k++)
{
wr_lcd(dat,str1[k]);
delay(200);
}
/*wr_lcd(comm,0x80);//第一行字符地址
for(k=0;k〈16;k++)
{
wr_lcd(dat,str1[k]);
delay(200);
}*/
wr_lcd(comm,0xc0);//第二行数据指针的地址
for(k=0;k<8;k++)
{
wr_lcd(dat,str2[k]);
delay(200);
}
delay(5000);
}
//LCD输出设置
}
voiddelaynum(unsignedintd_time)
{
while(d_time——);
}
voidwr_lcd(unsignedchardat_comm,unsignedintcontent)
{
Delay(40);
if(dat_comm)
{
LCD_REG=0x01;
LCD_DATA=content;//数据端口
LCD_REG=0x03;//en=0
delaynum(80);
LCD_REG=0x00;//en=0
}
else
{
LCD_REG=0x00;
LCD_DATA=content;
LCD_REG=0x02;//rs==1en==0写指令端口
delaynum(80);
LCD_REG=0x00;//en=0
}
Delay(100);
}
voidDelay(unsignedintnDelay)
{
intii,jj,kk=0;
for(ii=0;ii〈nDelay;ii++)
{
for(jj=0;jj〈1024;jj++)
{
kk++;
}
}
}
*Endoflcd。
c
第五章设计总结
在两周万年历的课程设计中,我首先学到的是软件的安装,在前几天,一直安装CCS3.3和驱动,尽管电脑系统是32位的,因为装不上补丁不能用。
接下来学习的就是软件的编写,基本要求是可对年月日时分秒进行计数。
当秒加到60时,分自动加1,当分加到60时,小时自动加1,当小时加到24,天加1,天加到30时,月加1,月加到12时,年加1。
这部分我们原先需要用的是定时器,但是一直无法显示出想要的效果,最后是在老师的指导下将定时器那部分程序直接用延时程序代替。
最后将软硬件联系调试,在1602上正常显示时间并进行运作.
通过这两周的学习,对DSP有了更深的了解,掌握了对现有器件进行编程,实现各种简单地显示控制。