LCD——ARM的Proteus实验

实验原理

ARM的P0.0口到P0.10口接LCD,P0.11接LED。每过一段时间LED状态改变,LCD显示LED的状态。

Proteus仿真电路图

proteus仿真ARM控制LCD

C语言源程序

#include  <LPC21XX.H>
#define rs (1<<8)
#define rw (1<<9)
#define en (1<<10)
#define busy (1<<7) //P0.7
typedef unsigned char uint8;
uint8 ledDown[]={"The LED is down!"};
uint8 ledUp[]={"The LED is up!"};
void waitLCD() /*等待LCD*/
{
IO0DIR=0xf00;
while(1)
{
IO0CLR=rs;
IO0SET=rw;
IO0SET=en;
if(!(IO0PIN & busy))break;
IO0CLR = en;
}
IO0DIR=0xfff;
}
void lcdOp(uint8 dat)/*送LCD控制码*/
{
waitLCD();
IO0CLR=rs;
IO0CLR=rw;
IO0CLR=0xff;
IO0SET=dat;
IO0SET=en;
IO0CLR=en;
}
void lcdData(uint8 dat)/*送LCD显示数据*/
{
waitLCD();
IO0SET=rs;
IO0CLR=rw;
IO0CLR=0xff;
IO0SET=dat;
IO0SET=en;
IO0CLR=en;
}
void lcdInit(void)/*初始化LCD,DataSheet里有建议的初始化代码*/
{
/* LCD配置为两行,5*7字体 */
lcdOp(0x38);
lcdOp(0x38);
lcdOp(0x06);
lcdOp(0x0E);
lcdOp(0x01);
/* LCD配置为一行,5*10字体
lcdOp(0x34);
lcdOp(0x34);
lcdOp(0x06);
lcdOp(0x0E);
lcdOp(0x01);
*/
}
void lcdDisplay(uint8 addr,uint8 *p)/*LCD显示字符串*/
{
lcdOp(addr);
while(*p !='\0'){
lcdData(*(p++));
}
}
void lcdClear(void)/*LCD清屏*/
{
lcdOp(0x01);
}
void delay (void) {
unsigned volatile long i,j;
for(i=0;i<60000;i++)
for(j=0;j<10;j++)
;
}
int main(void)
{
lcdInit();/*初始化LCD显示*/
IO0DIR=0xfff;//设置为输出口
IO0CLR=0xfff;
while (1) {
IO0CLR = 0x000800;
lcdDisplay(0x80,ledUp);
delay();
lcdClear();
IO0SET = 0x000800;
lcdDisplay(0x80,ledDown);
delay();
lcdClear();
}
}
菜鸟的ARM学习笔记(第一阶段)
  1. LED闪烁——ARM的Proteus实验
  2. 开关控制LED——ARM的Proteus实验
  3. LCD——ARM的Proteus实验
  4. UART——ARM的Proteus实验
  5. Eint1外部中断——ARM的Proteus实验
  6. 多个外部中断——ARM的Proteus实验
  7. 中断结合串口——ARM的Proteus实验
  8. 定时器——ARM的Proteus实验
  9. SPI通信——ARM的Proteus实验
  10. SPI通信(多从设备)——ARM的Proteus实验
  11. ADC数模转换——ARM的Proteus实验

 

返回单片机目录, ARM目录, 返回首页