Delay_nms(2000);
/*延时2S*/
}
}
/*************显示指定座标的一串字符子函数***************/
void ePutstr(uchar x,uchar y,uchar const*ptr)
{
uchar i.I=0:
while(ptr[I]>31){I++;)
for(i=0;i<I:i++){
DisplayoneChar(x++,Y,pt r[i]);
if(X==16){
x=0;y^=1:
}
}
}
/***************
void LocateXY(char posx,char posy)
{
uchar temp;
temp&=0x7f;
temp=posx&0xof;
posy&=0x01;
if(posy)templ=0x40;
templ=0x80;
LcdWriteCommand(temp,0):
}
/**************显示指定座标的一个字符子函数************/
void DisplayOneChar(uchar X.uchar y,uchar Wdata)
{
LocateXY(x,y):
LcdWriteData(Wdata);
}
/**************LCD初始化子函数******************/
void lnitLcd(void)
{
LcdWriteCommand(0x38,O):
/*8位数据传送,2行显示,5*7字形,不检测忙信号*/
Delay_nms(5);
LcdWriteCommand(Ox38,O):
/*8位数据传送;2行显示,5*7字形,不检测忙信号*/
Delay_nms(5);
LcdWriteCommand(0x38.0):
/*8位数据传送,2行显示,5*7字形,不检测忙信号*/
Delay_nms(5);
LcdWriteCommand(0x38,1):
/*8位数据传送,2行显示,5/7字形、检测忙信号*/
LcdWriteCommand(0x08,1):
/*关闭显示,检测忙信号*/
LcdWriteCommand(0x01,1);
/*清屏,检测忙信号*/
LcdWriteCommand(0x06,1):
/*显示光标右移设置,检测忙信号*/
LcdWriteCommand(0xoc,1):
/*显示屏打开,光标不显示、不闪烁,检测忙信号*/
}
/****************写命令到LCM子函数*******************/
void LcdWfiteCommand(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable():
LCM_RS_0;LCM_RW_0;_NOP();
DataPort=CMD;_NOP();
LCM_EN_1;_NOP0;_NOP();LCM_EN_O;
}
/***************写数据到LCM子函数***************/
void LEDWriteData(uchar dataW)
{
WaitF0rEnable();
LCM_RS_1;LCM_RW_O;_NOP();
DataPort=dataW;_NOP();
LCM_EN_1:_NOP();_NOP();LCM_EN_0;
}
/************检测LCD忙忙信号子函数**************/
void WaitFOrEnable(vOid)
{
uchar val;
DataPort=0xff;
LCM_RS_0;LCM_RW_1;_NOP();
LCM_EN_1:_NOP0;_NOP();
DDRA=0x00;
vaI=PINA;
while(val&Busy)val=PINA;
LCM_EN_O;
DDRA=0xff;
}
/************************************************/
void Delay_1 ms(void)
/*1mS延时子函数*/
{ uint i;
for(i=1;i<(uint)(xtal*143-2):i++)
}
/*==========================*/
void Delay_nms(uint n)
/*n*1mS延时子函数*/
{
uint i=0:
while(i<n)
{Delay_1 ms();
i++:
}
}
编译通过后,将ac18.hex文件下载到AVR单片机综合试验板上进行实际演示。标示“LCD16*2”的单排座上正确插上16x2液晶模块(脚号对应,不能插反),在标示“DC5V”电源端输入5V稳压电压。我们看到液晶屏上的显示与我们设计的目标完全一致。
9.在AVR单片机综合试验板上实现16x2LCM演示程序--2一开始第一行及第二行显示预定的字符串(第一行显示“--ELECTRONICS--”,第二行显示“WORLDMAgazine”),随后第二行显示移动的ASCII字符。
在我的文档中新建一个acl9的文件夹。建立一个acl9.pri的工程项目,最后建立源程序文件ac19.C。输入下面的程序:
#include<iom1 6v.h>
#include<macros.h>
/*---------------------------------*/
#define uchar unsigned char
#define uint unsigned int
#define LCM_RS_1 PORTBI=BlT(P80)
#define LCM_RS_O PORTB&=~BIT(PB0)
#define LCM_RW_1 PORTBI=BIT(PBl)
#define LCM_RW_0 PORTB&=~BlT(PBl)
#define LCM_EN_1 PORTBl=BlT(PB2)
#define LCM_EN_O PORTB&=~BIT(PB2)
#define DataPort PORTA
#define Busy 0x80
#define xtal 8
/*-----------------------------*/
const uchar exampl[]=“--ELECTRONlCS--WORLD
magazine\n”;
void Delay_1 ms(void);
void Delay_nms(uint n);
void WaitFOrEnabIe(void):
void LcdWmeData(uchar W):
void LcdWriteCommand(uchar CMD,uchar Attribc);
void InitLcd(void);
void Display(uchar dd):
void DlsplayoneChar(uchar×,uchar y,uchar Wdata);
void ePutstr(uchar x,uchar y,uchar const*ptr);
/******************************************/
void main(void)
{
uchar temp;
Delay_nms(400);
DD RA:0xff:PO RTA=0x00;
DDRB=0xff:PORTB=0x00;
InitLcd();
temp=32;
ePutstr(0,0,exampl);
Delay_nms(3200);
while(1)
{
temp&=0x7f;
if(temp<32)temp=32;
Display(temp++);
Delay_nms(400);
}
}
/*********************************/
本文关键字:暂无联系方式综合-其它,单片机-工控设备 - 综合-其它