@floatsd
2016-05-14T17:34:12.000000Z
字数 2842
阅读 818
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; // 初始化CTR
Delay(LCDDELAY);
CTRGR=0x0;
Delay(LCDDELAY);
CTRGR=0x80;
Delay(LCDDELAY);
TurnOnLCD(); // 打开显示
LCDCLS(); // 清除显示内存
CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
f_init(); //初始化显示时钟00 00 00
f_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]; //写入数字0
CTRLCDCR=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);//每秒钟冒号闪烁一次
else
f_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;}
}