@floatsd
2016-05-14T17:34:12.000000Z
字数 2842
阅读 950
note_DSP
CTRLCDLCR=(NbW==0)?(LEDKEY[nCount][i]):(~ledkey[nCount][i]);为 CTRLCDRCR=(NbW==0)?(LEDKEY[nCount][i]):(~ledkey[nCount][i]); CTRLCDLCR和CTRLCDRCR分别对应着液晶显示模块两个数据控制接口的地址,每次控制屏幕显示符号,都先编好对应index以循环将所需数据映射到index,写入对应2数据控制接口:
#define CTRLCDLCR *(int *)0x108003#define CTRLCDRCR *(int *)0x108004
#define CTRLCDCMDR *(int *)0x108001)写入命令控制字,然后再向辅助控制接口(#define CTRLCDCR *(int *)0x108002)写入0。
void Delay(unsigned int nTime); // 延时子程序void TurnOnLCD(); // 打开显示void LCDCLS(); // 清除屏幕显示内容
CTRLCDCMDR=LCDCMDPAGE+a;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS+b;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);
- 试设计程序在液晶屏上显示记时时钟,精确到秒,形式为“时时:分分:秒秒”。
void main(void){InitSysCtrl(); //初始化系统时钟CTRGR=0x80; // 初始化CTRDelay(LCDDELAY);CTRGR=0x0;Delay(LCDDELAY);CTRGR=0x80;Delay(LCDDELAY);TurnOnLCD(); // 打开显示LCDCLS(); // 清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);f_init(); //初始化显示时钟00 00 00f_clock(); //运行时钟 }
void f_init(){int i,j;int shift[6]={0,6,16,22,32,38}; //调整数字间距CTRLCDCMDR=LCDCMDPAGE; // 设置起始页Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for(j=0;j<6;j++){CTRLCDCMDR=LCDCMDVERADDRESS+shift[j]; // 设置显示位置Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=1;i<7;i++ ){CTRLCDLCR=ledkey[0][i]; //写入数字0CTRLCDCR=0;}}}
void f_clock(){int i,j;int n[6]={0,0,0,0,0,0},int shift[6]={0,6,16,22,32,38};for (;;){for(j=0;j<6;j++){CTRLCDCMDR=LCDCMDVERADDRESS+shift[j];Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=1;i<7;i++ ){CTRLCDLCR=ledkey[n[j]][i];CTRLCDCR=0;}}if(n[5]%2==0)f_colon(1);//每秒钟冒号闪烁一次elsef_colon(0);Delay(4096); //延时n[5]++; //更新时刻if ( n[5]==10 ){n[5]=0;n[4]++;if(n[4]==6){n[4]=0;n[3]++;if(n[3]==10){n[3]=0;n[2]++;if(n[2]==6){n[2]=0;n[1]++;if(n[1]==10){n[1]=0;n[0]++;if(n[0]*10+n[1]==24){//超过24小时for(i=0;i<6;i++,n[i]=0);//置零}}}}}}}}
void f_colon(int a){CTRLCDCMDR=LCDCMDPAGE; // 设置操作页Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS+2*8-2; // 冒号1显示列Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);if (a==0){CTRLCDLCR=0x28; CTRLCDCR=0; }else{CTRLCDLCR=0x00; CTRLCDCR=0;}CTRLCDCMDR=LCDCMDVERADDRESS+4*8-2; // 冒号2显示列Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);if (a==0){CTRLCDLCR=0x28; CTRLCDCR=0; }else{CTRLCDLCR=0x00; CTRLCDCR=0;}}