第4章 软件的设计
图4-2 校准时间流程图
程序代码如下:
while(1) {if(ag==1)
{if ((K1|K2)==0) //初始化 {Delay5Ms(); if ((K1|K2)==0) Set1302(inittime); }
if (K3==0) // 设置和选择项目键 {Delay5Ms(); if(K3==0) { id++; if(id>7) id=0;} while(K3==0);} switch(id) { case 0: sec=0; Disp_line1(); Disp_line2(); break; case 1://年 year=1; Disp_line1();
Disp_line2(); id_case1_key(); break;
16
第4章 软件的设计 case 2://月 year=0; mon=1; Disp_line1();
Disp_line2(); id_case1_key(); break; case 3://日 mon=0; day=1; Disp_line1(); Disp_line2(); id_case1_key(); break; case 4://星期 day=0; weekk=1; Disp_line1();
Disp_line2(); id_case1_key();
4.1.3 LCD1602液晶显示模块
LCD1602液晶显示器属于字符型液晶显示器,其内部自带有字符库,所以只要向显示器输送字符的ASCII码,就可以显示该字符了。对于1602显示程序的编写最主要的是掌握好1602的读写操作的时序。1602显示器的控制端分别为RS、RW和E,当写指令时RS为低电平,RW为低电平,E首先为高电平,然后将数据送出,在延时一定时间后E变为低电平。这样就把命令写到了1602中。当写数据时RS为高电平,RW为低电平,E首先为高电平,然后将数据送出,在延时一定的时间后E变为低电平。这样就把数据写到了1602中。在实际应用1602时,要先将显示器初始化,初始化的内容包括清屏、设置显示模式,首字
17
华北理工大学继续教育学院 符的位置、光标的有无和闪烁等,然后才能显示具体内容。
开始 进行LCD的初始化 进行数据的处理 调用写指令子函数 调用写数据子函数 显示
图4-3 LCD显示程序流程图
该函数的作用是对LCD进行检测,看LCD是否处于忙的状态.当bflag=1时表示忙,此时不可以向LCD进行读写操作.而当busy=0时,表示可以向它读写数据. 程序代码:
void wait() {P2=0xff;
RW=1; RS=0; do{E=0;E=1;}while(busy==1); }
void dispone(dat) 写数据,并显示出来
第4章 软件的设计 {P2=dat;
RW=0; RS=1; E=0; E=1; wait(); }
void wrcom(com) 向LCD写入控制字 {P2=com;
RW=0; RS=0; E=0; E=1; wait(); }
void init_LCD() 初始化LCD
{wrcom(0x01); 显示清零,数据指针清零 wrcom(0x06); 写一个字后指针加一
wrcom(0x38); 设置16*2显示,5*7点阵,8位数据接口 wrcom(0x0c); 设置开显示,不显示光标 }
void dispmore(line,row,uchar dat[],i) //格式为dispmore(第几行,第几列,开始要显示的字符地址,显示几个字符); {uchar com; s=dat;
if(line==1)
{com=0x80+row-1; // 第一行第一列对应的RAM的地址位为0x80H wrcom(com);
while((i--)!=0&&com<=0x8f) {dispone(*s); com++; s++; } }
19
华北理工大学继续教育学院 else
{com=0xc0+row-1; wrcom(com);
while((i--)!=0&&com<=0xcf) {dispone(*s); com++; s++; } } }