当前位置:首页 » 编程软件 » 12864编程

12864编程

发布时间: 2022-08-11 11:20:06

㈠ 12864LCD的图形显示编程c语言

clude "intrins.h"
sbit io_LCD12864_RS = P1^0 ;
sbit io_LCD12864_RW = P1^1 ;
sbit io_LCD12864_EN = P1^2 ;

#define io_LCD12864_DATAPORT P0

#define SET_DATA io_LCD12864_RS = 1 ;
#define SET_INC io_LCD12864_RS = 0 ;
#define SET_READ io_LCD12864_RW = 1 ;
#define SET_WRITE io_LCD12864_RW = 0 ;
#define SET_EN io_LCD12864_EN = 1 ;
#define CLR_EN io_LCD12864_EN = 0 ;

void v_Lcd12864CheckBusy_f( void ) //忙检测函数
{
unsigned int nTimeOut = 0 ;
SET_INC
SET_READ
CLR_EN
SET_EN
while( ( io_LCD12864_DATAPORT & 0x80 ) && ( ++nTimeOut != 0 ) ) ;
CLR_EN
SET_INC
SET_READ
}

void v_Lcd12864SendCmd_f( unsigned char byCmd ) //发送命令
{
v_Lcd12864CheckBusy_f() ;
SET_INC
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byCmd ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN

SET_READ
SET_INC
}
void v_Lcd12864SendData_f( unsigned char byData ) //发送数据
{
v_Lcd12864CheckBusy_f() ;
SET_DATA
SET_WRITE
CLR_EN
io_LCD12864_DATAPORT = byData ;
_nop_();
_nop_();
SET_EN
_nop_();
_nop_();
CLR_EN
SET_READ
SET_INC
}

void v_DelayMs_f( unsigned int nDelay ) //延时
{
unsigned int i ;
for( ; nDelay > 0 ; nDelay-- )
{
for( i = 125 ; i > 0 ; i-- ) ;
}
}

void v_Lcd12864Init_f( void ) //初始化
{
v_Lcd12864SendCmd_f( 0x30 ) ; //基本指令集
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x01 ) ; //清屏
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x06 ) ; //光标右移
v_DelayMs_f( 50 ) ;
v_Lcd12864SendCmd_f( 0x0c ) ; //开显示
}
void v_Lcd12864SetAddress_f( unsigned char x, y ) //地址转换
{
unsigned char byAddress ;
switch( y )
{

case 0 : byAddress = 0x80 + x ;
break;
case 1 : byAddress = 0x90 + x ;
break ;
case 2 : byAddress = 0x88 + x ;
break ;
case 3 : byAddress = 0x98 + x ;
break ;
default :
break ;
}
v_Lcd12864SendCmd_f( byAddress ) ;
}
void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData )
{
v_Lcd12864SetAddress_f( x, y ) ;
while( *pData != '\0' )
{
v_Lcd12864SendData_f( *pData++ ) ;
}

}
void main( void )
{
v_Lcd12864Init_f() ;

v_Lcd12864PutString_f( 0,0, "快乐随行") ;
v_Lcd12864PutString_f( 2,1, "分都不给") ;
v_Lcd12864PutString_f( 0,2, "*LCD12864ST7920*") ;
v_Lcd12864PutString_f( 0,3, "辛苦回答了半天") ;
while( 1 ) ;
}

㈡ 单片机 12864液晶 我的8位数据线连接了P2.0-P2.5,和P1.2和P1.3,程序里怎么编程啊

这样接程序麻烦一些,执行效率也比较低,原来一条指令可以完成的操作现在需好多条指令才能实现
原来这条语句 LCD12864_DA_PORT=DATE 要进行修改
如果P2.6-P2.7没有被占用,送数据时(变量名DATE)可以这样写
P2=DATE;
if(DATE&0x80) P1^3=1;
else P1^3=0;
if(DATE&0x40) P1^2=1;
else P1^2=0;
如果P2.6-P2.7已被占用,送数据时(变量名DATE)可以这样写 :
temp1=0xc0&P2;/暂存P2高2位状态
P2=temp1|(0X3F&DATE);//取数据的低6位 加原来的高2位
if(DATE&0x80) P1^3=1;//取数据的第8位D7
else P1^3=0;
if(DATE&0x40) P1^2=1;//取数据的第7位D6
else P1^2=0;
以上是C语言程序,看起来不算长,但换成汇编语言又多了好几条指令,因此执行比较慢

㈢ 12864液晶不带字库的用C语言和51单片机编程

#include<reg51.h>
#include<absacc.h>

#define uchar unsigned char

#define datawr 0x1200 //写数据通道
#define comwr 0x1000 //写控制命令通道
#define datare 0x1300 //读数据通道
#define comre 0x1100 //读忙通道

uchar code disp_data[]={" 浙江大学 " //第一行,第一页
"04级通信工程一班" //第三行
" 宁波理工学院 " //第二行
" 竞赛小组 " //第四行
"128X64液晶显示器" //第一行,第二页
" 测试程序 " //第三行
" 07年07月25日 " //第二行
" Tornado "}; //第四行

void set12864();
void write_command(uchar command);
void write_page(uchar data_add);
void read_page(uchar data_add);
void delays(uchar cont);

void main()
{
while(1)
{
set12864(); //初始化12864
write_page(0); //写入一页数据
read_page(0x30); //读出一页数据到内部RAM
delays(2); //延时2s
write_page(64); //写入下一页数据
delays(2); //延时2s
}
}

//初始化12864子程序
void set12864()
{
write_command(0x30); //功能设定控制字
write_command(0x0c); //显示开关控制字
write_command(0x01); //清除屏幕控制字
write_command(0x06); //进入设定点控制字
}

//写控制命令子程序
void write_command(uchar command)
{
bit flag="1"; //12864空闲标志位
while(flag) //检查12864是否空闲
flag="XBYTE"[comre]&0x80;
XBYTE[comwr]=command; //空闲传送控制字
}

//写一页子程序
void write_page(uchar data_add)
{
bit flag="1"; //12864空闲标志位
uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符
write_command(0x80);
for(;num>0;num--)
{
while(flag) //检查12864是否空闲
flag="XBYTE"[comre]&0x80;
XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据
}
}

//读一页子程序
void read_page(uchar data_add)
{
bit flag="1"; //12864空闲标志位
uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符
write_command(0x80);
for(;num>0;num--)
{
while(flag) //检查12864是否空闲
flag="XBYTE"[comre]&0x80;
DBYTE[data_add++]=XBYTE[datare]; //空闲传送数据
}
}

//延时cont秒子程序
void delays(uchar count)
{
unsigned char h,i,j,k;
do
{
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}while(--count);
}

这是图象显示程序:

#include<reg51.h>
#include<absacc.h>

#define uchar unsigned char
#define uint unsigned int

#define datawr 0x1200 //写数据通道
#define comwr 0x1000 //写控制命令通道
#define datare 0x1300 //读数据通道
#define comre 0x1100 //读忙通道

uchar code disp_data[] = // 数据表
{
0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x80,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x07,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x0B,0xFF,
0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x1F,
0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x01,0xFF,0xFF,0xFF,0xF3,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x03,0xFF,0xFF,0xFF,0xE6,0x62,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x60,0x00,0x68,
0x01,0xFF,0xFF,0xFE,0x00,0x60,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x00,0x00,0x0E,
0x01,0xFF,0xFF,0xF8,0x00,0x4B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x8E,0x08,0x79,
0x07,0xFF,0xFF,0xF0,0x00,0x41,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6,0xC0,0x07,0x61,
0xC3,0xFF,0xFE,0xC0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xED,0xEF,0x3F,
0x83,0xFF,0xFE,0x60,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xC0,0xFF,0xFD,0xFC,0x6C,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF0,0x7F,0xF3,0xFF,0xFE,0x60,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF3,0xFF,0xFF,0x50,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,
0xFB,0xFF,0xF1,0xF8,0x8C,0xD8,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x6F,0xD9,
0xC2,0x3F,0xF8,0x40,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xDF,0x1E,0xFF,
0xFF,0x7F,0xFC,0x38,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x64,0x2F,0x6F,0xFF,
0xFD,0x7B,0xFC,0x1F,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x5F,0x7C,0xEE,0xFF,
0xC7,0xFF,0xBC,0x0F,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFE,0xEF,0xFF,
0xFF,0xE7,0xDC,0x07,0xE7,0xF8,0x12,0x7F,0xFF,0xFF,0xFF,0xFF,0x47,0xFF,0xFF,0xFF,
0xFF,0xE7,0x80,0x03,0xF4,0x00,0x00,0x5F,0xFF,0xFF,0xFE,0xFE,0xE3,0xFF,0xFF,0xFF,
0xFF,0xFE,0xC0,0x01,0xC0,0x00,0x00,0x1B,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7F,0xEE,0xC0,0x00,0xC0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFE,0x98,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x20,0x0E,0x60,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x05,0x80,0xE0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x09,0x80,0xA0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x85,0x2A,0xC0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
0xBF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,
0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0x1F,
0xFF,0xFF,0x80,0x00,0x40,0x00,0x00,0x00,0xFF,0x80,0xFF,0xFF,0xFF,0x80,0x07,0xFF,
0xFF,0xFF,0xC0,0x00,0xC0,0x00,0x00,0x01,0xFF,0x01,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,
0xFF,0xFF,0xE0,0x63,0x80,0x00,0x00,0x01,0xFE,0x01,0xFF,0x18,0x00,0x3F,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x01,0xCC,0x01,0xFE,0x00,0x07,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0xA0,0x03,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x05,0xC0,0x03,0xC8,0x00,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x88,0x0C,0x07,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFC,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xC0,0x7F,0xFF,0xFF,
0xFF,0xFF,0xF8,0x07,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0F,0xFF,0xFE,
0xFF,0xFF,0xD0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x03,0xFF,0xF8,
0xFF,0xFC,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xC0,
0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0xFF,0xF8,
0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x1F,0xFE,
0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x02,0xFF,
0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0xF0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
0xE0,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,
0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01
};

void set12864();
void setxy(uchar x,uchar y);
void write_command(uchar command);
void write_16byte(uint data_add);
void delays(uchar count);

void main()
{
uchar x,y,i;
while(1)
{
y="0x80"; //设置液晶上半部分坐标
x="0x80";
delays(2); //延时2s
set12864(); //初始化12864
delays(2);
for(i=0;i<32;i++) //写入液晶上半图象部分
{ //写入坐标
setxy(x,y);
write_16byte(i*16); //连续写入16字节数据
y++; //y轴地址加1
}
y="0x80"; //设置液晶下半部分坐标
x="0x88";
for(i=0;i<32;i++) //写入液晶下半图象部分
{
setxy(x,y); //写入坐标
write_16byte((32+i)*16);//连续写入16字节数据
y++; //y轴地址加1
}
write_command(0x34); //写入扩充指令命令
write_command(0x36); //显示图象
}
}

//初始化12864子程序
void set12864()
{
write_command(0x30); //功能设定控制字
write_command(0x0c); //显示开关控制字
write_command(0x01); //清除屏幕控制字
write_command(0x06); //进入设定点控制字
}

//设置绘图坐标
void setxy(uchar x,uchar y)
{
write_command(0x34); //写入扩充指令命令
write_command(y); //写入y轴坐标
write_command(x); //写入x轴坐标
write_command(0x30); //写入基本指令命令
}

//写控制命令子程序
void write_command(uchar command)
{
bit flag="1"; //12864空闲标志位
while(flag) //检查12864是否空闲
flag="XBYTE"[comre]&0x80;
XBYTE[comwr]=command; //空闲传送控制字
}

void write_16byte(uint data_add)
{
bit flag="1"; //12864空闲标志位
uchar num="16"; //16个循环,连续写入16个字节
for(;num>0;num--)
{
while(flag) //检查12864是否空闲
flag="XBYTE"[comre]&0x80;
XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据
}
}

//延时count秒子程序
void delays(uchar count)
{
unsigned char h,i,j,k;
do
{
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}while(--count);
}

㈣ keil中12864编程

这样的函数要自己编的,就是所谓的驱动,keil连数码管的驱动都没有怎么会有12864的驱动呢,主要原因就是因为这样程序是和硬件连接有很大关系的,比如说你数据口用的P0,别人用的P1,你P0.0连的数据口0,别人就连到数据口1这样的程序根本没办法统一,所以keil不提供硬件的驱动函数

㈤ 驰宇微12864液晶屏怎样编程实现任意位置显示字和图形

驰宇微12864液晶屏带字库的LCD模块不需要取字模,只需要向LCD模块写入需要显示的汉字的GB2312代码就可以了,显示位置可用模块手册中的定位指令代码设置,切换到点阵图形模式,并设置好书写规律,在字模相应位置写入对应字模数据就可以了,比如16*16点阵,定义第一组两个8字节数据的起始位置,连续列入两字节,然后定位下一行起始地址,再写,重复上述过程直到写完一个字的全部16行,原理都是一样的,具体命令与实现方法或有不同。

㈥ 单片机 12864 液晶,C语言基本编程完美讲解[跪求]!!!

12864基本上都有八位的地址/数据线,和一些使能、R\W、片选、屏幕负压什么的引脚构成,编程基本思路就是先给送八位地址,在发八位数据,根据你的datasheet里的控制字资料(就是那个好多的表)往里依次写初始化命令,设置显示位置等,然后发数据就行了。。只能这么讲了,你C语言要是基础过关很容易看懂。。

热点内容
qq刷红包脚本 发布:2024-05-03 16:16:54 浏览:769
c服务编译耗时优化原理及实例 发布:2024-05-03 15:35:26 浏览:15
ue编程 发布:2024-05-03 15:34:40 浏览:610
经典的c语言程序 发布:2024-05-03 15:03:24 浏览:859
工程加密网 发布:2024-05-03 14:59:55 浏览:292
吃冰球解压 发布:2024-05-03 14:59:10 浏览:895
编译芯片发烫 发布:2024-05-03 14:59:05 浏览:549
优化算法pdf 发布:2024-05-03 14:18:10 浏览:291
python算法书 发布:2024-05-03 14:14:25 浏览:736
方舟怎么加入服务器闪退 发布:2024-05-03 14:05:27 浏览:491