第4章 软件的设计 第4章 软件的设计
4.1 里程表的软件设计
本自行车里程表软件采用模块化设计方法。整个系统由初始化模块、频率测量模块、LCD显示模块、速度计算与显示模块、里程计算与与显示模块、数据存储、读取模块、定时器中断服务模块、时钟模块以及其他功能模块组成。本设计的主要内容是自行车里程速度表,日历时钟为附加功能,在此进行简单介绍。
4.1.1 里程速度功能模块实现
里程速度功能程序流程图如图4-1所示。
11
华北理工大学继续教育学院 开始 读取EEPROM数据 检测按钮处理直径设置 初始化设置特殊功能寄存器、置定时常数、开中断、清屏等 等待中断 INT0 刷新累计 行驶时间 刷新里程、速度存储里程数据等 INT1 切换屏幕显示内容
图4-1 里程速度功能程序流程图
程序代码如下:
void main() {
EEPROM_LXRD(0x43,0,3,number); qs=number[0]; as=number[1];
第4章 软件的设计 bs=number[2];
init_LCD(); 初始化LCD dispmore(1,1,\for(i=0;i<25000;i++);
dispmore(2,1,\ 显示欢迎信息 for(i=0;i<25000;i++);
dispmore(2,1,\for(i=0;i<25000;i++);
dispmore(2,1,\for(i=0;i<25000;i++);
dispmore(2,1,\for(i=0;i<25000;i++);
dispmore(2,1,\for(i=0;i<25000;i++);
dispmore(2,1,\for(i=0;i<30000;i++);
W1302(0x90,0xa5);//打开充电二级管 一个二级管串联一个2K电阻 W1302(0x8e,0x80);//写保护,禁止写操作 wrcom(0x01); MODE=0; P2=0xff; qs2=0; tr1=5; tr2=5; wrcom(0x01);
dispmore(1,1,\wrcom(0xc9); dispone('c'); wrcom(0xca); dispone('m'); P2=0xff;
13
华北理工大学继续教育学院 wrcom(0xc6);dispone(tr1+0x30); wrcom(0xc7);dispone(tr2+0x30); while(1){
if(K1==0){for(i=0;i<4000;i++);if(K1==0){if(++tr1>9)tr1=0;wrcom(0xc6);dispone(tr1+0x30);for(i=0;i<32000;i++);}}
if(K2==0){for(i=0;i<4000;i++);if(K2==0){if(++tr2>9)tr2=0;wrcom(0xc7);dispone(tr2+0x30);for(i=0;i<32000;i++);}} if(K3==0){for(i=0;i<4000;i++);if(K3==0)break;} }
tc=3.14*(10*tr1+tr2); TMOD=0x11; TH0=0x3c; TL0=0xb0; TH1=0xb1; TL1=0xdf;
IT0=1; 外部中断触发方式均是边缘触发 IT1=1;
IE=0x9f; 开中断 IP=0x02;
TR0=1; T0和T1开始计时 TR1=1; P33=1; IE0=0; wrcom(0x01);
置定时常数
4.1.2 日历时钟模块功能
时钟显示模块可以通过按键来校准时间。当K3按键按下时,电子日历停止走时,此时可以进行年的校准,年调好之后,再按一下校准时间便可以调整月,同理可以对日、小时、分、秒进行设置。对应有K1、K2键,可以加与减的操作。都调整好之后就将按照新时间开始走时。具体流程图如下。
第4章 软件的设计 开始 始终开始工作 是否显示时间 是 设置键是否按下 是 选中要修改的 加键是否按下 减键是否按下 修改时间和日期 返回 15