单片机程序实例程序实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机程序实例程序实例

以简单的52单片机LCD例程为例,将下面的程序模块化。将延时函数独立成一个模块,为了使程序简化,将所有的和LCD相关的函数(包括LCD初始化函数、写命令函数、写数据函数、显示函数等)独立成一个模块。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs = P2^5;

sbit rw = P2^6;

sbit e = P2^7;

uint i;

/*********************************************/

void delay1ms(uint z)

{ //延迟子程序0.5MS

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*********************************************/

void write_com(uchar com)

{

rs=0;

rw=0;

e=0;

P0=com;

delay1ms(1); e=1;

delay1ms(1); e=0;

delay1ms(1);

}

void write_date(uchar date)

{

rs=1;

rw=0;

e=0;

P0=date; delay1ms(1); e=1;

delay1ms(1); e=0;

delay1ms(1); }

void init()

{

delay1ms(1);

write_com(0x30);

delay1ms(1);

write_com(0x30);

delay1ms(1); //2次显示模式设置

write_com(0x0c); delay1ms(1); //开显示及光标设置

write_com(0x01); delay1ms(1); /显示清屏

write_com(0x06); delay1ms(1); //显示光标移动设置

}

void LcdAddress( uchar x, uchar y ) //地址转换

{

uchar address

switch( x )

{

case 0 : address = 0x80 + y break

case 1 : address = 0x90 + y break

case 2 : address = 0x88 + y break

case 3 : address = 0x98 + y break

default : break

}

write_com( address )

}

void LcdString( uchar x, uchar y, uchar *pData ) //送数据

{

LcdAddress( x, y )

while( *pData != '\0' )

{

write_date( *pData++ )

}

}

void main()

{ init();

while(1)

{

LcdString(0,0,"12一切:;abc");

}

}

模块化如下:

*******************************************************************************

delay.c文件

******************************************************************************* #include "delay.h"

void delay1ms(uint z)

{

//延迟子程序0.5MS

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

*******************************************************************************

delay.h文件

******************************************************************************* #ifndef __DELAY_H__

#define __DELAY_H__

#define uchar unsigned char

#define uint unsigned int

(这里可以将平时用到的所有宏定义等也进行模块化,以后程序中要用到时只要包含一个头文件即可)

void delay1ms(uint z);

#endif

*******************************************************************************

lcd.c文件

*******************************************************************************

#include

#include "lcd.h"

#include "delay.h"

sbit rs = P2^5;

sbit rw = P2^6; s

bit e = P2^7; uint i;

void write_com(uchar com)

{

rs=0;

rw=0; e=0;

P0=com;

delay1ms(1); e=1;

delay1ms(1); e=0;

delay1ms(1);

}

void write_date(uchar date)

{

rs=1;

rw=0;

e=0;

P0=date; delay1ms(1); e=1;

delay1ms(1); e=0;

delay1ms(1); }

void init()

相关文档
最新文档