单片机程序实例程序实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()