當前位置:首頁 » 編程軟體 » 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語言要是基礎過關很容易看懂。。

熱點內容
現在玩游戲的電腦需要什麼配置 發布:2024-04-20 17:09:57 瀏覽:195
游樂園的密碼一般為多少 發布:2024-04-20 17:09:51 瀏覽:41
興元安卓機怎麼進系統 發布:2024-04-20 17:07:16 瀏覽:806
我的世界伺服器如何放村民 發布:2024-04-20 17:05:35 瀏覽:359
手機反編譯dex 發布:2024-04-20 17:01:01 瀏覽:704
安卓怎麼設置微信拍一拍 發布:2024-04-20 16:44:48 瀏覽:569
三星3熱點密碼怎麼設置 發布:2024-04-20 16:30:52 瀏覽:579
用keil編譯顯示警告warn 發布:2024-04-20 16:27:09 瀏覽:894
訪問在哪兒 發布:2024-04-20 16:20:42 瀏覽:201
安卓手機有什麼可以把聲音改成電音的軟體 發布:2024-04-20 16:19:40 瀏覽:564