最新的1602LCD显示的秒表毕业设计

发布时间 : 星期二 文章最新的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文件烧入到芯片中,

安徽理工大学软件学院

联系合同范文客服:xxxxx#qq.com(#替换为@)