[关闭]
@floatsd 2016-05-14T17:34:12.000000Z 字数 2842 阅读 818

实验四 液晶显示器控制显示

note_DSP


1 实验目的

2 实验内容

2.1 实验准备

2.2 运行程序观察效果

  1. #define CTRLCDLCR *(int *)0x108003
  2. #define CTRLCDRCR *(int *)0x108004
  1. void Delay(unsigned int nTime); // 延时子程序
  2. void TurnOnLCD(); // 打开显示
  3. void LCDCLS(); // 清除屏幕显示内容
  1. CTRLCDCMDR=LCDCMDPAGE+a;
  2. Delay(LCDDELAY);
  3. CTRLCDCR=0;
  4. Delay(LCDDELAY);
  5. CTRLCDCMDR=LCDCMDVERADDRESS+b;
  6. Delay(LCDDELAY);
  7. CTRLCDCR=0;
  8. Delay(LCDDELAY);

3 实验结论

3.1 实验流程图

Created with Raphaël 2.1.2开始初始化DSP时钟初始化CTR清屏,设置显示位置由0到9循环显示数字

3.2 实验结论

4 思考题

  • 试设计程序在液晶屏上显示记时时钟,精确到秒,形式为“时时:分分:秒秒”。
Created with Raphaël 2.1.2开始初始化DSP时钟初始化CTR清屏,设置显示位置初始化定时器显示时刻判断冒号状态,显示冒号延时按时钟逻辑更新时刻序列
  1. void main(void)
  2. {
  3. InitSysCtrl(); //初始化系统时钟
  4. CTRGR=0x80; // 初始化CTR
  5. Delay(LCDDELAY);
  6. CTRGR=0x0;
  7. Delay(LCDDELAY);
  8. CTRGR=0x80;
  9. Delay(LCDDELAY);
  10. TurnOnLCD(); // 打开显示
  11. LCDCLS(); // 清除显示内存
  12. CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行
  13. Delay(LCDDELAY);
  14. CTRLCDCR=0;
  15. Delay(LCDDELAY);
  16. f_init(); //初始化显示时钟00 00 00
  17. f_clock(); //运行时钟 }
  1. void f_init()
  2. {
  3. int i,j;
  4. int shift[6]={0,6,16,22,32,38}; //调整数字间距
  5. CTRLCDCMDR=LCDCMDPAGE; // 设置起始页
  6. Delay(LCDDELAY);
  7. CTRLCDCR=0;
  8. Delay(LCDDELAY);
  9. for(j=0;j<6;j++)
  10. {
  11. CTRLCDCMDR=LCDCMDVERADDRESS+shift[j]; // 设置显示位置
  12. Delay(LCDDELAY);
  13. CTRLCDCR=0;
  14. Delay(LCDDELAY);
  15. for ( i=1;i<7;i++ )
  16. {
  17. CTRLCDLCR=ledkey[0][i]; //写入数字0
  18. CTRLCDCR=0;
  19. }
  20. }
  21. }
  1. void f_clock(){
  2. int i,j;
  3. int n[6]={0,0,0,0,0,0},int shift[6]={0,6,16,22,32,38};
  4. for (;;){
  5. for(j=0;j<6;j++){
  6. CTRLCDCMDR=LCDCMDVERADDRESS+shift[j];
  7. Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);
  8. for ( i=1;i<7;i++ ){
  9. CTRLCDLCR=ledkey[n[j]][i];CTRLCDCR=0;}}
  10. if(n[5]%2==0)
  11. f_colon(1);//每秒钟冒号闪烁一次
  12. else
  13. f_colon(0);
  14. Delay(4096); //延时
  15. n[5]++; //更新时刻
  16. if ( n[5]==10 ){
  17. n[5]=0;n[4]++;
  18. if(n[4]==6){
  19. n[4]=0;n[3]++;
  20. if(n[3]==10){
  21. n[3]=0;n[2]++;
  22. if(n[2]==6){
  23. n[2]=0;n[1]++;
  24. if(n[1]==10){
  25. n[1]=0;n[0]++;
  26. if(n[0]*10+n[1]==24){//超过24小时
  27. for(i=0;i<6;i++,n[i]=0);//置零
  28. }}}}}}}
  29. }
  1. void f_colon(int a){
  2. CTRLCDCMDR=LCDCMDPAGE; // 设置操作页
  3. Delay(LCDDELAY);
  4. CTRLCDCR=0;
  5. Delay(LCDDELAY);
  6. CTRLCDCMDR=LCDCMDVERADDRESS+2*8-2; // 冒号1显示列
  7. Delay(LCDDELAY);
  8. CTRLCDCR=0;
  9. Delay(LCDDELAY);
  10. if (a==0){
  11. CTRLCDLCR=0x28; CTRLCDCR=0; }
  12. else{
  13. CTRLCDLCR=0x00; CTRLCDCR=0;}
  14. CTRLCDCMDR=LCDCMDVERADDRESS+4*8-2; // 冒号2显示列
  15. Delay(LCDDELAY);
  16. CTRLCDCR=0;
  17. Delay(LCDDELAY);
  18. if (a==0){
  19. CTRLCDLCR=0x28; CTRLCDCR=0; }
  20. else{
  21. CTRLCDLCR=0x00; CTRLCDCR=0;}
  22. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注