求液晶屏12232B程序,求14432B-5液晶屏程序
找不到12232B液晶屏程序,无锡市斯迈诺科技有限公司厂家给的例程没用,不知道问题出在哪里。生产厂家也没有懂51编程的技术人员,求哪位好心人给个例程。不管是12232B还是14432B,都需要通过厂家咨询显示模块的主控芯片型号以及模块的接口定义,一般来说官方给的例程一定是可用的,即使不能直接用通过简单移植也就没问题了。 感觉和1602差不多一样的控制方式 给你一个官方给的例程
/*
CH14432B-ST7920 并口源程序
*/
/*$$$$$$$$$$$$$$$$$
Module : CH12864B/D
InterfaCS : 68008 BIT Bus
soft : KeilC51 Ver7.0
Control IC: ST7920
------------------------------------------------------------------
Note:
1.Parallel bus drive programme.
2.Default Crystal 12.000Mhz.
3.This is a new program.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
#include <reg52.h>
#include <intrins.h>
#include "int/tupian.c"
#define uchar unsigned char
#define uintunsigned int
sbit RS=P2^3;
sbit RW=P2^4;
sbit E =P2^5;
sbit REST =P0^1;
sbit LED = P0^6;
#define lcd_data P1
//================================================================
void DELAY_CLS(void);
void delay_ms(uint ms_value);
void delay_us(uchar us_value);
void wr_data(uchar wdata);
void wr_cmd(uchar cmd);
void LCD_CLS(void);
void wr_cmd_data( uchar cmd,uchar dat1,uchar dat2);
void gotoxy(uint row, uint col);
void SendStr(uchar code *ptString);
void SendStr1(uchar code *ptString);
void init_lcd(void);
void disp_Graphic();
void disp_fangkuang(void );
voidtestshow(uchar fst, uchar snd);
void CallBuiltinChar(void);
//----------------------------------------------------------------
void delay_us(uchar us_value) //delay about 1 us
{
while(us_value--)
{
_nop_();
_nop_();
}
}
//----------------------------------------------------------------
void delay_ms(uint ms_value) //delay about 1 ms
{
uint k;
for(k=0;k<ms_value;k++)
{
delay_us(200);
}
}
//----------------------------------------------------------------
void wr_cmd(uchar cmd)
{
lcd_data = 0xff; // Set the port as Output
RS = 0;
RW = 0;
E = 1;
lcd_data = cmd;
delay_us(10); //此处必需延时
E = 0;
RW = 1;
delay_us(10); //此处必需延时
// lcd_data = 0xFF;
}
//----------------------------------------------------------------
void wr_data(uchar wdata)
{
lcd_data = 0xFF; // Set the port as Output
RS = 1;
RW = 0;
E = 1;
lcd_data = wdata;
delay_us(10); //此处必需延时
E = 0;
RW = 1;
delay_us(10); //此处必需延时
// lcd_data = 0xFF;
}
//----------------------------------------------------------------
void DELAY_CLS()
{
delay_ms(100);
LCD_CLS();
}
//----------------------------------------------------------------
void LCD_CLS()
{
wr_cmd(0x30); // 8-bit interface, Extended instruction
wr_cmd(0x01);
delay_ms(5);
}
//----------------------------------------------------------------
void SendStr(uchar code *ptString)
{
while((*ptString)!='\0')
{
wr_data(*ptString++);
}
}
//----------------------------------------------------------------
void SendStr1(uchar code *ptString)
{
while((*ptString)!='\0')
{
wr_data( *ptString++);
delay_ms(30);
}
}
//----------------------------------------------------------------
void init_lcd(void)
{
//delay_ms(40);
wr_cmd(0x30); //设定为8位控制,基本指令起动
wr_cmd(0x34); //设定为8位控制,扩充指令起动
wr_cmd(0x0c); // 显示打开
LCD_CLS(); //清屏
wr_cmd(0x06); // 设定AC加1
}
//----------------------------------------------------------------
void gotoxy(uint row, uint col)
{
switch(row)
{
case 1: wr_cmd(0x80+col);break;
case 2: wr_cmd(0x90+col);break;
case 3: wr_cmd(0x88+col);break;
case 4: wr_cmd(0x98+col);break;
}
}
//----------------------------------------------------------------
//----------------------------------------------------------------
voidtestshow(uchar fst, uchar snd)
{
uchar x,y,i,k;
for(i=0;i<10;i+=8) //当i=0时显示上面128×32,当i=8时显示下面12*3
for(y=0;y<32;y++)
{ if((y%2)==1)
k=fst;
else
k=snd;
for(x=0;x<10;x++)
{
wr_cmd(0x36); //扩充指令 绘图显示
wr_cmd(y+0x80); //行地址
wr_cmd(x+0x80+i); //列地址
wr_data(k);
wr_data(k);
wr_cmd(0x30); //扩充指令 绘图关闭
}
}
}
/////////////---------------显示方框-----------------------
void disp_kuang()
{
uchar i,j;
wr_cmd(0x36); //扩充指令打开
for(i=0;i<1;i++)
{
wr_cmd(0x80); //行地址
wr_cmd(0x80+i); //列地址
wr_data(0xff);
wr_data(0xff);
}
for(j=1;j<16;j++)
{
for(i=0;i<9;i++)
{
wr_cmd(0x80+j); //行地址
wr_cmd(0x80+i); //列地址
if(i==0) {wr_data(0x80);wr_data(0x00); }
if(i==8) {wr_data(0x00);wr_data(0x01); }
else{wr_data(0x00);wr_data(0x00); }
}
} //第一排完
for(j=0;j<15;j++)
{
for(i=0;i<9;i++)
{
wr_cmd(0x90+j); //行地址
wr_cmd(0x90+i); //列地址
if(i==0) {wr_data(0x80);wr_data(0x00); }
if(i==8) {wr_data(0x00);wr_data(0x01); }
else{wr_data(0x00);wr_data(0x00); }
}
}
for(i=0;i<1;i++)
{
wr_cmd(0x9f); //行地址
wr_cmd(0x90+i); //列地址
wr_data(0xff);
wr_data(0xff);
} //第二排完
wr_cmd(0x30); //扩充指令 绘图关闭
}
//-------------------------------------------------
// ^_^ 功 能 说 明: 显示128*64取模图片 ^_^ 数据扫描方向:水平扫描
//-------------------------------------------------
void display_pic(uchar *pic)
{
uchar x,y,i,j=0;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)
{
for(x=0;x<8;x++)
{
wr_cmd(0x36); //扩充指令 绘图显示打开
wr_cmd(y+0x80); //行地址
wr_cmd(x+0x80+i); //列地址
wr_data(*pic++);
wr_data(*pic++);
}
}
}
// Call built-in Charactors
void CallBuiltinChar(void)
{
uint i,j;
// 0xA140 ~ 0xA15F
gotoxy(2,0);
for (i = 0; i < 32; i++)
{
wr_data(0xA1);
wr_data(0x40 + i);
}
gotoxy(3,0);
for (j = 0; j < 16; j++)
{
wr_data(0xA2);
wr_data(0x45 + j);
}
}
//================================================================
void main()
{
uint i;
delay_ms(100);
REST=0;
delay_ms(200);
REST=1;
init_lcd();
while(1)
{
LED = 0;
delay_ms(500);
LED = 1;
delay_ms(500);
LED = 0;
DELAY_CLS();
display_pic(b);
delay_ms(3500);
DELAY_CLS();
testshow(0xaa,0x55); //雪花
delay_ms(3500);
DELAY_CLS();
//
testshow(0xff,0xff); //全显
delay_ms(2000);
DELAY_CLS();
//testshow(0x00,0x00); //空白
// delay_ms(4500);
// DELAY_CLS();
//testshow(0xff,0x00); //横显
// delay_ms(2500);
// DELAY_CLS();
//testshow(0x00,0xff);//横显
// delay_ms(2500);
// DELAY_CLS();
//testshow(0x55,0x55); //竖显
// delay_ms(2500);
// DELAY_CLS();
//testshow(0xAA,0xAA); //竖显
// delay_ms(2500);
// DELAY_CLS();
//testshow(0xaa,0x55); //雪花
// delay_ms(2500);
//DELAY_CLS();
gotoxy(1,0);
SendStr("航航航航航航航航航");
gotoxy(2,0);
SendStr("显显显显显显显显显");
delay_ms(4500);
DELAY_CLS();
disp_kuang();
delay_ms(4500);
DELAY_CLS();
gotoxy(1,0);
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
gotoxy(2,0);
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
wr_data(0xd2);
wr_data(0xbc);/*壹D2BC*/
delay_ms(4500);
DELAY_CLS();
gotoxy(1,0);
for(i=0;i<18;i++)
{
wr_data(0x30+i);
}
gotoxy(2,0);
for(i=0;i<18;i++)
{
wr_data(0x41+i);
}
delay_ms(4500);
DELAY_CLS();
}
}
ST7920驱动芯片的驱动例程网上大把,只要管脚连接争取,初始化参数按照厂家给的值配置,很容易点亮的 收到,谢谢,原因找到,是不同单片机型号IO速度有区别,太快了,液晶屏反应不过来,需要在液晶屏的使能端加足够的延时。
页:
[1]