導航:首頁 > 編程語言 > lcd12864c51代碼

lcd12864c51代碼

發布時間:2022-01-20 04:49:02

Ⅰ 單片機C語言,關於AT89C51的裡面LCD12864疑問

這個鍵盤控制的程序在很多單片機的書籍上都有例子,比較好弄。
關於lcd的顯示,就要看你的單片機的介面和lcd的介面了,會稍微復雜一點兒。

Ⅱ 如何用51單片機在LCD12864上顯示數字

利用51單片機控制lcd12864顯示一串數字比如:123456789可...
際上很簡單,刷新而已,你讓他按一下就在程序里去一個數字,然後刷新lcd的顯示不就得了。

Ⅲ 12864液晶字元串顯示程序51單片機(加懸賞)

你好!

你的12864是什麼驅動晶元,液晶帶字型檔還是不帶字型檔?要說明一下才能編程

Ⅳ 基於51單片機的LCD12864proteus模擬

原理圖和程序都沒有問題,是單片機的運行程序代碼文件指定有錯,liushuid2.hex並不是這個程序的編譯代碼文件HEX。原理圖我做了簡化,重新上傳一個壓縮文件,下載運行一下就知道了。

下圖是模擬結果。

Ⅳ 51單片機LCD12864顯示亂碼怎麼回事

/***********************************//* LCD12864初始化函數 *//***********************************/void LCD12864_Init(){ delay_ms_12864(45); LCD_PSB = 0; //0串口工作模式,1並口工作模式 delay_ms_12864(1); LCD_RES = 0; //復位 delay_ms_12864(1); LCD_RES = 1; //復位置高 delay_ms_12864(10); Write_12864(0x30,0); //8/4位介面選擇 delay_us_12864(15); //延時>100us Write_12864(0x30,0); //指令集選擇 delay_us_12864(5); //延時>37us Write_12864(0x08,0); //顯示關 delay_us_12864(15); //延時>100us Write_12864(0x10,0); //游標控制 delay_us_12864(15); //延時>100us Write_12864(0x0c,0); //顯示開 delay_us_12864(15); //延時>100us Write_12864(0x01,0); //清屏 delay_ms_12864(10); //延時>10ms Write_12864(0x06,0); //進入設定點}

Ⅵ ISD4004 與 LCD12864通過STC51單片機程序如何寫

看見你提的問題都語無倫次的,邏輯性這么差,估計你單片機基礎也好不到哪裡。忠言逆耳,話不中聽,但是可以參考參考。
你想用STC單片機控制語音晶元ISD4004,用LCD12864做顯示屏,估計你是想做一個音樂播放器或錄音器之類的吧。這個工作量有點大,對初學者也很有難度。我的建議是:
1、你要了解ISD4004,首先先去下載ISD4004的DATA SHEET,最好是同時找中文和英文的。裡面肯定會有硬體電路圖,也會教你怎麼去控制。但是一般來說,控制的程序對初學者很難,這里你可以偷懶:到網上去下載別人的ISD4004的模塊程序。最好找那種有注釋的,對著文檔看程序,去理解,一直到你能用STC單片機控制它做它能做的事為止。
2、12864在這里就簡單多了。還是和1中的一樣,下載DATA SHEET,下載模塊程序,自己去理解,一直到能使用它做你想做的事。
3、模塊都弄清楚以後,就要把這兩個部分的程序弄在一起了。這個說難不難,說簡單也不簡單。初學者最好要弄明白單片機到底是怎麼工作的:單片機是從main函數開始逐條指令執行的,每條指令的指令周期也不一樣。很多人以為學C了,就不需要像學匯編那樣去了解硬體了。其實學C需要了解更多,因為C不是直接針對硬體操作的。
扯遠了,主要是你要理解數據在你的程序是從哪裡來,到哪裡去的。就這樣 ,祝你成功。我在大二做過AT89S52+LCD12864+IDS1420的語音溫度計,因為是用熱敏電阻做的溫度探頭,所以還涉及到AD晶元的控制,比你這個復雜多了。如果需要資料的話,可以發一些給你做參考。

Ⅶ 有沒有大神寫一個 LCD12864 自上而下滾動的 51 代碼 有字型檔的

網路知道 發不了這么抄多英文 有限制 你下個今日頭條 關注小果學電子 點開他寫的 51單片機學習32 12864顯示 找到了記得給我個贊 你要修改中文字幕 可以電腦上下個取模軟體 他裡面也講到 然後用這軟體生成C代碼 就可以顯示你要的字了。

Ⅷ 求51單片機LCD12864串列顯示程序,只用SID口和SCLK口,能顯示輸出四行中文的,最好寫上main函數,謝謝

//LCD12864字型檔系列(控制器ST7920A),單片機:89S52,晶振:12M,
//串口連接 與 並口連接 ( 串口時 屏蔽 並行模塊)
//並行連接方式,P2.0-RS,P2.1-RW,P2.2-E
#include<reg52.h>
#include <intrins.h>
sbit RS=P3^2; //串口時為CS
sbit RW=P3^1; //串口為SID
sbit E=P3^0; //串口為時鍾SCLK
sbit stop=P2^2;
sbit PSB=P3^4;
sbit REST=P3^3;
//以下是用<at89x51.h>頭文件的定義
/*
#define RS P2_0
#define RW P2_1 //定義引腳
#define E P2_2
#define PSB P2_3
#define REST P2_4
#define Data P1
#include<at89x51.h>
*/
#define BF 0x80 //用於檢測LCM狀態字中的Busy標識
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字元串例子
//"F1--English",也可以往裡面寫入漢字碼,一個漢字由兩個碼組成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6; //字元串長度
//漢字,直接可以寫入字形
unsigned char code uctech[] = {"有限公司"};
const Uchar lengthCF3=8;
Uchar code TAB1[]={
/*-- 調入了一幅圖像:D:\公司的文件\程序圖片\未命名11.bmp --*/
/*-- 寬度x高度=128x64 --*/
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x05,0xAE,0x90,0x00,0x00,0x00,0x00,0x00,
0x95,0x55,0x48,0x80,0x00,0x00,0x00,0x00,
0x2B,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xA8,0x00,0x22,0x15,0x20,0x00,0x00,0x00,
0x97,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,
0x45,0x55,0x08,0xA0,0x00,0x00,0x00,0x0A,
0x6F,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,
0xB2,0x80,0x40,0x00,0x04,0x40,0x00,0x00,
0xBA,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x4D,0x55,0x15,0x15,0x20,0x00,0x00,0x95,
0xD5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE8,0x40,0x40,0x00,0x00,0x00,0x4A,
0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x2A,0x00,0x40,0x00,0x00,0x15,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFD,0xD0,0xAA,0x01,0x00,0x00,0x25,
0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xB6,0x00,0x10,0x00,0x01,0x4A,
0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFD,0xE8,0x40,0x00,0x00,0x11,
0x00,0x24,0x84,0x00,0x00,0x00,0x00,0x00,
0xAB,0xFF,0xFF,0x55,0x00,0x00,0x00,0x24,
0x02,0x49,0x5E,0xA0,0x00,0x00,0x00,0x00,
0x84,0xBF,0xFF,0xF4,0x88,0x00,0x00,0x00,
0x10,0x05,0xFF,0xF4,0x00,0x00,0x00,0x00,
0x29,0x0B,0xFF,0xFA,0x20,0x00,0x00,0x00,
0x02,0xBF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0x44,0xA0,0x57,0xFD,0x80,0x00,0x00,0x00,
0x08,0x5F,0xFF,0xFF,0x80,0x00,0x00,0x00,
0x91,0x0A,0xAA,0xF6,0x50,0x00,0x00,0x00,
0x41,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0x44,0xA0,0x01,0x1B,0x84,0x00,0x00,0x00,
0x26,0xFF,0xFF,0xFF,0x90,0x00,0x00,0x00,
0x11,0x0A,0xAA,0x6D,0x68,0x00,0x00,0x00,
0x0B,0xFB,0xFF,0xEF,0xE0,0x00,0x00,0x00,
0xC4,0xA0,0x01,0x02,0x80,0x00,0x00,0x00,
0x43,0xF1,0xFE,0x63,0xF0,0x00,0x00,0x00,
0x15,0x55,0x54,0x55,0x6A,0x00,0x00,0x00,
0x9F,0xE3,0xFC,0x87,0x38,0x00,0x00,0x00,
0xCA,0xAB,0x91,0x00,0x90,0x00,0x00,0x00,
0x07,0xC1,0xFA,0x2A,0x80,0x00,0x00,0x00,
0x25,0xFF,0xFE,0x95,0x2A,0x00,0x00,0x00,
0x2F,0x13,0xFE,0xFC,0x10,0x00,0x00,0x00,
0x95,0xFF,0xFF,0xC0,0x50,0x00,0x00,0x00,
0x0F,0x41,0xFF,0xF3,0x80,0x00,0x00,0x00,
0x4F,0xFF,0xFF,0xF9,0x2A,0x00,0x00,0x00,
0x9F,0x08,0xFF,0xD4,0x00,0x00,0x00,0x00,
0xB3,0xFF,0xFF,0xFE,0x54,0x80,0x00,0x00,
0x1E,0xA0,0x7F,0xA0,0x00,0x00,0x00,0x00,
0x5F,0xFE,0x7F,0xFE,0xAA,0x00,0x00,0x00,
0x5F,0x57,0xFE,0x00,0x00,0x00,0x00,0x00,
0xAF,0xFD,0x7F,0xFF,0x94,0x80,0x00,0x00,
0x1F,0xFE,0xE8,0x00,0x00,0x00,0x00,0x00,
0x7F,0xFA,0x7F,0x5F,0xCA,0x00,0x00,0x00,
0x3F,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xAF,0xF1,0x7F,0xDE,0xF5,0x40,0x00,0x00,
0x1A,0xA0,0x80,0x00,0x00,0x00,0x00,0x00,
0xDF,0xF2,0x3F,0xFC,0xC2,0x00,0x00,0x00,
0x50,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x2F,0xFA,0xBF,0xFF,0xF4,0xA0,0x00,0x00,
0x05,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
0x97,0xFE,0x3F,0xFF,0xE3,0x00,0x00,0x00,
0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x68,0xFF,0xDF,0xD5,0x78,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0x5F,0xFF,0x48,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD0,0xAA,0xF4,0xA0,0xAA,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0x45,0x09,0x05,0x11,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA1,0x28,0xA0,0x00,0x44,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x08,0x42,0x04,0x52,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA5,0x09,0x51,0x00,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x50,0x04,0x4A,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xAA,0x05,0x50,0x21,0x48,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x90,0x02,0x84,0x12,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xD4,0x05,0x48,0x10,0x48,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x81,0x20,0x00,0x02,0x02,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xA4,0x84,0x92,0x48,0x94,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x48,0x10,0x00,0x00,0x21,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//這個是在串口時指令和數據之間的延時
/*
void delay10US(Uchar x)
{
Uchar k;
for(k=0;k<x;k++);
}
*/
const Uchar delay=250; //延時時間常數
static void Wait1ms(void)//延遲1 ms
{
Uchar cnt=0;
while (cnt<delay) cnt++;
}
//延遲n ms
void WaitNms(int n)
{
Uchar i;
for(i=1;i<=n;i++)
Wait1ms();
}
void stopint(void)//中斷程序
{
if(stop==0)
while(1);
}
//**************************************************************************//
//以下是並口時才開的
//讀忙標志,
void RDBF(void)
{
Uchar temp;
RS=0; // RS=0
RW=1; // RW=1
while(1)
{
P1=0xFF; //數據線為輸入
E=1;
temp=P1;
E=0; // E=0
if ((temp&0x80)==0) break;
}
}
//寫數據到指令寄存器
void WRCommand(Uchar comm)
{
RDBF();
RW=0;
P1=comm;
E=1;
E=0;
}
//寫數據到數據寄存器
void WRData(Uchar TEMP)
{
RDBF();
RS=1;
RW=0;
P1=TEMP;
E=1;
E=0;
stopint();
}
/////////////////////////////////////////////////////////////////////////////////
//以下是串口時開的讀寫時序
/*void SendByteLCD(Uchar WLCDData)
{
Uchar i;
for(i=0;i<8;i++)
{
if((WLCDData<<i)&0x80)RW=1;
else RW=0;
E=0;
E=1 ;
}
}
SPIWR(Uchar Wdata,Uchar WRS)
{
SendByteLCD(0xf8+(WRS<<1));
SendByteLCD(Wdata&0xf0);
SendByteLCD((Wdata<<4)&0xf0);
}
void WRCommand(Uchar CMD)
{
RS=0;
RS=1;
SPIWR(CMD,0);
delay10US(90);//89S52來模擬串列通信,所以,加上89S52的延時,
}
void WRData(Uchar Data)
{
RS=0;
RS=1;
SPIWR(Data,1);
}
*/
/*******************************************************************/
//初始化LCD-8位介面
void LCDInit(void)
{ // PSB=0; //串口
PSB=1;//並口時選這個,上一行取消
REST=1;
REST=0;
REST=1;
WRCommand(0x30); //基本指令集,8位並行
WRCommand(0x06); //啟始點設定:游標右移
WRCommand(0x01); //清除顯示DDRAM
WRCommand(0x0C); //顯示狀態開關:整體顯示開,游標顯示關,游標顯示反白關
WRCommand(0x02); //地址歸零
}
//顯示數組字元串(顯示半寬字型16*8點陣)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{
Uchar i;
WRCommand(addr); //設定DDRAM地址
for(i=0;i<count;)
{
WRData(english[i*2]);
WRData(english[i*2+1]);
i++;
}
}
//顯示連續字串(半寬字元)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
Uchar j;
for(j=0;j<count;)
{
WRCommand(addr); //設定DDRAM地址
WRData(i+j);
j++;
WRData(i+j);
addr++;
j++;
}
}
//自定義字元寫入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{
Uchar i;
for(i=0;i<16;)
{
WRCommand(addr+i); //設定CGRAM地址
WRData(data1);
WRData(data1);
i++;
WRCommand(addr+i); //設定CGRAM地址
WRData(data2);
WRData(data2);
i++;
}
}
//顯示自定義的字元,並把這個字元填滿全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
Uchar j;
for(j=0;j<0x20;)
{
WRCommand(addr+j); //設定DDRAM地址
WRData(0x00);
WRData(i);
j++;
}
}
void CLEARGDRAM(void)
{
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<32;j++)
{
WRCommand(0x80+j);
WRCommand(0x80);//X坐標
for(i=0;i<32;i++)//
{
WRData(0x00);
}
}

}
//寫入GDRAM 繪圖,Y是Y繪圖坐標,2個位元組一行,CLONG是圖形長度,以位元組
//為單位;HIGHT是圖形高度,TAB是圖形數據表.12864M的圖形顯示是相當於256*32點陣.
//由兩屏128*32上下兩屏組成,同一行的下屏的頭地址緊接上屏的未地址。
//繪圖在串口輸入時,會比在並口下的輸入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{
Uint k;
Uchar j;
Uchar i;
WRCommand(0x34);
WRCommand(0x36);
for(j=0;j<hight;j++)//32
{ //先上半屏
WRCommand(Y1+j); //Y總坐標,即第幾行
WRCommand(0x80);//X坐標,即橫數第幾個位元組開始寫起
for(i=0;i<clong;i++)//
{
WRData(TAB1[clong*j+i]);
}
//後下半屏

for(k=0;k<clong;k++)//
{
WRData(TAB1[clong*(j+hight)+k]);
}

}
}
void menu(void)
{
LCDInit();
ShowNUMChar(0x80,0x01,0x0f);//顯示半寬特殊符號
ShowNUMChar(0x90,0x30,0x0f);//顯示半寬0~?數字標點
ShowNUMChar(0x88,0x41,0x0f);//顯示半寬A~P大寫
ShowNUMChar(0x98,0x61,0x0f);//顯示半寬a~p小寫
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
WRCGRAM(0xff,0x00,0x40);//寫入橫
WRCGRAM(0x00,0xff,0x50);//寫入橫2
WRCGRAM(0xaa,0xaa,0x60);//寫入豎
WRCGRAM(0x55,0x55,0x70);//寫入豎2
ShowCGChar(0x80,0x00);//顯示橫並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,02);//顯示橫2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,04);//顯示豎並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,06);//顯示豎2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
WRCGRAM(0x00,0x00,0x40);//清CGRAM1
WRCGRAM(0x00,0x00,0x50);//清CGRAM2
WRCGRAM(0xaa,0x55,0x40);//寫入點
WRCGRAM(0x55,0xaa,0x50);//寫入點2
ShowCGChar(0x80,00);//顯示點並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowCGChar(0x80,02);//顯示點2並填滿
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
ShowQQChar(0x80,uctech,lengthCF3);//顯示'有限公司',以下共四行
ShowQQChar(0x90,uctech,lengthCF3);
ShowQQChar(0x88,uctech,lengthCF3);
ShowQQChar(0x98,uctech,lengthCF3);
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
WRCommand(0x01); //清除顯示DDRAM
}
void menu2(void)
{ CLEARGDRAM();
WRGDRAM(0x80,16,32,TAB1);
WaitNms(250); //等待時間
WaitNms(250); //等待時間
stopint();
}
//主函數
void main(void)
{
menu();//初始化及半寬字元和點橫豎漢字掃描
menu2();//繪圖顯示
for(;;)
{;}
}

Ⅸ 利用51單片機控制LCD12864顯示一串數字比如:123456789可以通過一個按鍵控制顯示的數字一個一個刪除嗎

實際上很簡單,刷新而已,你讓他按一下就在程序里去一個數字,然後刷新LCD的顯示不就得了。

Ⅹ 51單片機LCD12864程序

LCM12864R-1液晶屏的程復序,可不是隨便給制個程序就行的,如果能行,那你就上網隨便找一個得了。
這是不行的,必須要根據LCD的硬體連接電路來寫程序,也就是必須知道引腳的連接,就是錯了一個引腳,程序也不能用的。
再則說,這LCD12864液晶屏的型號非常多,型號不同,程序是不同的,並不通用。
還得你自己,根據具體的型號,上網搜索一下相關的程序吧。然後根據實際的引腳連接,改一下引腳定義。

閱讀全文

與lcd12864c51代碼相關的資料

熱點內容
測繪大數據處理 瀏覽:739
appstore禁用銀行卡 瀏覽:369
ios支持文件夾導入的看書軟體 瀏覽:657
微信轉賬5000元圖片 瀏覽:703
桂林萬象城電影院今日影訊 瀏覽:58
note4文件管理移植 瀏覽:682
那種在線觀看網址鏈 瀏覽:321
資料庫中性別用什麼字元 瀏覽:672
易捷文件加密軟體注冊碼 瀏覽:312
一部關於偵探下馬和綉花鞋的老電影 瀏覽:19
山茶花之戀演員 瀏覽:750
周星馳全部電影在線免費觀看 瀏覽:613
vk網路中是什麼意思 瀏覽:489
win10UWP文件加密軟體 瀏覽:187
js怎麼判斷周六日 瀏覽:674
寄文件到香港多少運費 瀏覽:402
svn回到之前版本 瀏覽:342
!30e731Fzue! 瀏覽:697
重生山西抗戰軍閥 瀏覽:439
如下程序的輸出結果是 瀏覽:191

友情鏈接