📄 f330lcd.txt
字号:
LCD的调试程序 2006-08-25 11:08:27
大 中 小
LCD:
//程序描述:
//-----------------------------------------------------------------------------
// 此程序控制一块字符型液晶(WCM1602ATL012,它是5V 器件),,液晶资料可从新华龙公网
//站上下载,单片机的P0口作为液晶的8位数据口,P1.0为背光控制(LCDCTRL),P1.1送出脉
//冲信号(LCDE),P1.2为读写信号(LCDRW),P1.4为液晶片选信号(LCDRS),P1.3接发光二极管。
// 这个程序可以在该液晶模块显示一行字符:www.xhl.com.cn
//-----------------------------------------------------------------------------
//
//液晶接线方法
//-----------------------------------------------------------------------------
// 1脚接地;2脚接+5V;3脚通过1个10K电阻接+5v,通过1个430欧电阻接地;15脚接三极管
//(9013)的集电极,其发射极接地,基极通过1个5.1K电阻接地,并通过1个5.1K的电阻接
//LCDCTRL信号;16脚通过1个10电阻接+5v。液晶别的引脚直接接相应的数据或控制信号线。
//
//-----------------------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------------------
#include <c8051f330.h>
//-----------------------------------------------------------------------------
// 常量定义
#define SYSCLK 24500000 / 8 //系统工作频率
//-----------------------------------------------------------------------------
//位定义
//-----------------------------------------------------------------------------
sbit LED = P1^3; // LED所接的引脚
sbit LCDRS = P1^4;
sbit LCDRW = P1^2;
sbit LCDE = P1^1;
sbit LCDCTRL = P1^0;
//-----------------------------------------------------------------------------
//全局变量定义
//-----------------------------------------------------------------------------
//---------------------------------------------------
unsigned long i; //w w w . x h l . c o |
unsigned char xdata lcddata[15]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,// |
0x6d,0x2e,0x63,0x6e};// |
//m . c n |
//-----------------------------------------------------
unsigned char *lcdpoint; //指向 lcddata数组的指针
unsigned char lcd_data_count; //要显示的数据个数
//-----------------------------------------------------------------------------
// 函数定义
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void LCD_Init(void);
void SEND_LCD(unsigned char lcd_data_count);
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void)
{
unsigned char j;
PCA0MD &= ~0x40; //禁止看门狗定时器
SYSCLK_Init (); // 系统时钟初始化
PORT_Init (); // 交叉开关和通用I/O口初始化
LCD_Init(); //LCD初始化
LCDRS = 1; //准备送数据
for(i=0;i<5000;i++);
for(i=0;i<5000;i++);
lcdpoint=&lcddata;
for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--) //显示第一行字符
{
P0=*lcdpoint;
lcdpoint++;
LCDE =0;
LCDE =1;
for(i=0;i<700;i++);
} //字符显示完毕
while (1)
{
LED =!LED;
for(i=0;i<5000;i++);
for(i=0;i<5000;i++);
}
}
//-----------------------------------------------------------------------------
//系统时钟初始化
//-----------------------------------------------------------------------------
//
void SYSCLK_Init (void)
{
OSCICN = 0x80; // 系统时钟初始化为片内的 24.5MHz / 8
RSTSRC = 0x04; // 使能时钟丢失检测器
}
//-----------------------------------------------------------------------------
// 通用I/O口及交叉开关初始化
//-----------------------------------------------------------------------------
void PORT_Init (void)
{
XBR0 = 0x00; // 没有选择数字外设
XBR1 = 0x40; // 使能交叉开关和弱上拉
P0MDOUT = 0xff; // P0口设为推挽方式
P1MDOUT = 0xff; // P1口设为推挽方式
}
//-----------------------------------------------------------------------------
// 通用I/O口及交叉开关初始化
//-----------------------------------------------------------------------------
void LCD_Init(void)
{
LCDE = 1;
LCDRS = 0; //选通液晶
LCDRW = 0; //准备写数据
LCDCTRL=1; //背光开
for(i=0;i<50000;i++);
for(i=0;i<50000;i++);
for(i=0;i<50000;i++);
P0=0x38; //8位数据线
LCDE =0;
LCDE =1;
for(i=0;i<5000;i++);
for(i=0;i<5000;i++);
P0=0x0c; //开显示
LCDE =0;
LCDE =1;
for(i=0;i<5000;i++);
for(i=0;i<5000;i++);
P0=0x01; // 清屏
LCDE =0;
LCDE =1;
for(i=0;i<5000;i++);
for(i=0;i<5000;i++);
}
文章引用自:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -