发布时间 : 星期二 文章最新的1602LCD显示的秒表毕业设计更新完毕开始阅读
安徽理工大学软件学院
sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_EN=P2^2; bit LCD_Busy_Check(); void LCD_Busy_Check(); void LCD_Initialize();
void LCD_Write_Command(uchar); void LCD_ Write_Data(uchar);
//------------------------------------------------------------------------------ //延时
//------------------------------------------------------------------------------ void DelayMS(uint ms) {
uchar t;
while(ms--) for (t=0;t<120;t++); }
//------------------------------------------------------------------------------ //LCD忙检查
//------------------------------------------------------------------------------ bit LCD_Busy_Check() {
bit Result;
LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP(); Result=(bit)(P0&0X80); LCD_EN=0; return Result; }
//----------------------------------------------------------------------------- //向LCD写指令
//----------------------------------------------------------------------------- void LCD_Write_Command(uchar cmd) {
while (LCD_Busy_Check());
LCD_RS=0;LCD_RW=0;LCD_EN=0; _nop_(); _nop_();
P0=cmd; DelayNOP(); LCD_EN=1;DelayNOP(); LCD_EN=0; }
//---------------------------------------------------------------------------- //向LCD写数据
安徽理工大学软件学院
安徽理工大学软件学院
//---------------------------------------------------------------------------- void LCD_Write_Data(uchar str) {
while (LCD_Busy_Check());
LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=str;DelayNOP(); LCD_EN=1;DelayNOP();LCD_EN=0; }
//---------------------------------------------------------------------------- //初始化LCD
//---------------------------------------------------------------------------- void LCD_Initialize() {
DelayMS(5);LCD_Write_Command(0x38); DelayMS(5);LCD_Write_Command(0x0c); DelayMS(5);LCD_Write_Command(0x06); DelayMS(5);LCD_Write_Command(0x01); DelayMS(5); }
//---------------------------------------------------------------------------- //设置显示位置
//---------------------------------------------------------------------------- void LCD_Set_POS(uchar Position) {
LCD_Write_Command(Position|0X80); }
//---------------------------------------------------------------------------- //显示函数,在LCD指定行上显示字符串
//---------------------------------------------------------------------------- void Display_String(uchar*str,uchar LineNo) {
uchar k;
LCD_Set_POS(LineNo);
for (k=0;k<16;k++) LCD_Write_Data(str[k]); }
安徽理工大学软件学院
安徽理工大学软件学院
4 软件调试及系统仿真
4.1 软件编译调试环境
4.1.1 Keil工程的建立与调试
Keil C51 软件是目前最流行的开发8051系列的单片机的软件工具。Keil C51提供了包括C语言编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision4 IDE将这些部分结合起来。
打开Keil软件,将代码输入调试并在错误全被解决的情况下生成对应的hex文件;打开Proteus软件,将对应的原理图和生成的hexw文件链接。
在调试过程中我们出现了错误,如图4.1至4.4所示。
图4.1 错误运行图
单机错误信息,让指针跳到错误行,一步步调试之后得知是代码输入时输入法错误,把大写”V”改写为小写”v”。
图4.2 错误运行图
安徽理工大学软件学院
安徽理工大学软件学院
当我把分号加上了之后,又出现了如4.2图所示的错误。在我多番查询下,根据错误提示,将一个一个的错误改正。
图4.3 错误运行图
当我再次运行时,又出现以上的两个错误。通过我仔细的研究得知是由于输入时的马虎,我在前面定义的是propts,而这里出现了promts,所以导致了错误。
根据错误,一步一步的检查、调试之后,我把错误全部解决,如图4.4:
图4.4 错误运行图
4.1.2 编译和连接
打开Keil软件,将代码输入调试并在错误全被解决的情况下,点击target option键对文件进行编辑链接,生成对应的hex文件;打开PROTEUS软件,将对应的原理图和生成的hex文件连接。在芯片AT89C51上进行点击,将生成的hex文件烧入到芯片中,
安徽理工大学软件学院