第四章 系统软件设计
因设计主要是作用汇编语言来开发的51单片机项目程序,所以首先必须有一个可以在Windows XP或Windows vista操作系统下执行的汇编语言编译器,本设计采用Keil编译器进行编程,因为它可以支持一系列的51单片机。
开初始化 旧密新密存入再次输入重模式识别按手密码输设置完毕密码比开
图4.1 主程序的流程图
4.1主程序模块
主程序主要是完成系统初始化、设置中断向量、检查有无键按下、以及调用显示等等。主程序部分如下所示:
void main() {
uchar m=0; EA=1; EX0=1;
18
IT0=0; LED=0; LED1=0;
InitLCD();//初始12864
ClearScreen(0);//清屏 SetStartLine(0);//显示开始行
while(1)
{ jianpan(); if(flag==2) {
}
if(m==3)
{ }
if(flag==1) {
}
} }
void EX_INT0() interrupt 0 { }
shizhi();
delay(2000);
4.2 键盘扫描及识别子程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。其程序流程如图4.2所示
键盘部分程序如下: key:
;键盘程序名称
call ks
;调用子程序ks
19
jnz k1 jmp key
;判断是否有键按下 ;跳回键盘程序
ks:mov p1,#0f0h; mov a,p1; xrl a,#0f0h; ret;
图4.2 键盘扫描程序流程图
20
4.3系统模块密码设置子程序
由于设计是分模块化进行,所以子程序是整体软件系统的组成部分,子程序不但可以使程序化整为零,使其复杂简单化,同时也方便阅读,修改等,每个功能模块都有它自己的子程序,在本设计中是用LCD显示数据,所以就要用到显示子程序,设计中用的是矩阵键盘,所以就用到键盘扫描子程序,例如还有显示初始化子程序、LCD忙检测子程序、关闭状态显示子程序、开锁状态显示子程序、密码输入及修改状态显示子程序、密码输入错误后的提示子程序等。如下图为密码修改子程序流程图
选旧密码新密码存入缓重新再次输是否大比较密锁返
图4.3 设置密码子程序
4.4程序调试
在硬件支持的环境下,用proteus设计好的电路,Keil编好的程序编译成芯片可识别的S51文件,利用PC机写进proteus程序图芯片内进行仿真测试,并对其出现的错误进行修改,由图4.4~图4.8可看出最终调试成功。
21
图4.4 keil编译程序成功
图4.5 keil生成hex文件
图4.6 proteus调用keil的hex文件进行仿真
22