久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
求助STC90C514AD的12864顯示移植STC15W408AS單片機問題
[打印本頁]
作者:
herui2128
時間:
2022-7-11 14:17
標題:
求助STC90C514AD的12864顯示移植STC15W408AS單片機問題
最近在學STC15W408AS單片機,以前使用及顯示正常的STC90C514AD和12864點陣液晶程序移植過來后,出現顯示異常,求指導。
單片機源程序如下:
#include "stc15.h"
#include <intrins.h>
#include "LCD_12864.h"
void main()
{
P3M1 = 0x00;
P3M0 = 0x00;
LCD_Init( ); //初始化
LCD_ClearTXT( ); //文本區清RAM函數
LCD_ClearBMP( );
LCD_Ascii(1,0,"12345678 ");
while (1);
}
#define uint unsigned int
#define uchar unsigned char
////***********12864***************
//sbit CS=P3^5; //開發版引腳聲明
//sbit SID=P3^6;
//sbit SCK1=P3^4;
sbit CS=P3^7;
sbit SID=P3^6;
sbit SCK1=P3^5;
unsigned char code bmp1[],bmp2[];
//串口發送一個字節
void LCD_SendByte(unsigned char Dbyte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCK1 = 0;
Dbyte=Dbyte<<1; //左移一位
SID = CY; //移出的位給SID
SCK1 = 1;
SCK1 = 0;
}
}
//****************送命令********************
void LCD_WriteCommand( unsigned char Cbyte )
{
CS = 1;
LCD_SendByte(0xf8); //11111,RW(0),RS(0),0
LCD_SendByte(0xf0&Cbyte); //高四位
LCD_SendByte(0xf0&Cbyte<<4); //低四位(先執行<<)
CS = 0;
}
//****************送數據********************
void LCD_WriteData( unsigned char Dbyte )
{
CS = 1;
LCD_SendByte(0xfa); //11111,RW(0),RS(1),0
LCD_SendByte(0xf0&Dbyte); //高四位
LCD_SendByte(0xf0&Dbyte<<4); //低四位(先執行<<)
CS = 0;
}
//****************初始化********************
void LCD_Init( void )
{
LCD_WriteCommand(0x34); //8BitMCU,基本指令集合
LCD_WriteCommand(0x30); //AC歸0,不改變DDRAM內容
LCD_WriteCommand(0x01); //顯示ON,游標OFF,游標位反白OFF
LCD_WriteCommand(0x06); //清屏,AC歸0
LCD_WriteCommand(0x0c); //寫入時,游標右移動
}
void LCD_pos(uchar X,uchar Y)
{
uchar pos;
LCD_WriteCommand(0x30); //顯示文本命令
if (X==1) {X=0x80;} //第一行
else if (X==2) {X=0x90;}
else if (X==3) {X=0x88;}
else if (X==4) {X=0x98;}
pos = X+Y ;
LCD_WriteCommand(pos); //顯示地址
}
//***************文本區清RAM函數****************************
void LCD_ClearTXT( void )
{
LCD_WriteCommand(0x01);
LCD_WriteCommand(0x34);
LCD_WriteCommand(0x30);
}
//**************圖形區清RAM函數****************************************
void LCD_ClearBMP( void )
{
unsigned char i,j;
LCD_WriteCommand(0x34); //8Bit擴充指令集,即使是36H也要寫兩次
for(i=0;i<32;i++) //12864實際為256x32
{
LCD_WriteCommand(0x80|i); //行位置
LCD_WriteCommand(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
LCD_WriteData(0);
}
LCD_WriteCommand(0x36); //數據送完后最后開顯示
}
void LCD_DATA_3(uchar X,uchar Y,unsigned long DATA)
{
LCD_pos(X,Y);
if(DATA>=0 && DATA<10)
{
LCD_WriteData(DATA+0X30);
}
else if(DATA<100 && DATA>=10)
{
LCD_WriteData(DATA/10+0X30);
// LCD_WriteData('C');
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<1000 && DATA>=100)
{
LCD_WriteData(DATA/100+0X30);
// LCD_WriteData('.');
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<10000 && DATA>=1000)
{
LCD_WriteData(DATA/1000+0X30);
LCD_WriteData(DATA%1000/100+0X30);
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<100000 && DATA>=10000)
{
LCD_WriteData(DATA/10000+0X30);
LCD_WriteData(DATA%10000/1000+0X30);
LCD_WriteData(DATA%1000/100+0X30);
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<1000000 && DATA>=100000)
{
LCD_WriteData(DATA/100000+0X30);
LCD_WriteData(DATA%100000/10000+0X30);
LCD_WriteData(DATA%10000/1000+0X30);
LCD_WriteData(DATA%1000/100+0X30);
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<10000000 && DATA>=1000000)
{
LCD_WriteData(DATA/1000000+0X30);
LCD_WriteData(DATA%1000000/100000+0X30);
LCD_WriteData(DATA%100000/10000+0X30);
LCD_WriteData(DATA%10000/1000+0X30);
LCD_WriteData(DATA%1000/100+0X30);
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
else if(DATA<100000000 && DATA>=10000000)
{
LCD_WriteData(DATA/10000000+0X30);
LCD_WriteData(DATA%10000000/1000000+0X30);
LCD_WriteData(DATA%1000000/100000+0X30);
LCD_WriteData(DATA%100000/10000+0X30);
LCD_WriteData(DATA%10000/1000+0X30);
LCD_WriteData(DATA%1000/100+0X30);
LCD_WriteData(DATA%100/10+0X30);
LCD_WriteData(DATA%10+0X30);
}
}
//****************送字符串*********************************************
//1行顯示的是8個字符
//顯示8個修改參數即可
void LCD_Ascii(unsigned char row,unsigned char col,unsigned char *puts)
{
LCD_WriteCommand(0x30); //8BitMCU,基本指令集合
LCD_pos(row,col); //確定顯示地址
while(*puts != '\0') //判斷字符串是否顯示完畢
{
if(col==8) //判斷換行
{ //若不判斷,則自動從第一行到第三行
col=0;
row++;
}
if(row==5) row=0; //一屏顯示完,回到屏左上角
LCD_pos(row,col); //確定顯示地址
LCD_WriteData(*puts); //一個漢字要寫兩次
puts++;
LCD_WriteData(*puts);
puts++;
col++;
}
}
//**********字符反白顯示*************************************************
//輸入參數:CX=要反白字符的行(0-3)
//CY=要反白字符的列(0-7)
//width=要反白字符的長度(1-16)
//off_on開反白關反白
void LCD_convertChar (uchar CX, CY, width,off_on)
{
uchar lcdPosX,lcdPosY ;
uchar halfLineCnt,basicBlock;
// EA=0;
halfLineCnt = 16;
if (CX == 1){CX = 0x80;lcdPosY= 0x80;}
else if (CX == 2){CX = 0x90;lcdPosY= 0x90;}
else if (CX == 3){CX = 0x88;lcdPosY= 0x80;}
else if (CX == 4){CX = 0x88;lcdPosY= 0x90;}
lcdPosX = CX + CY;
for (; halfLineCnt != 0; halfLineCnt--)
{
basicBlock = width&0x1F; //低5位,主要是0到16
LCD_WriteCommand(0x36);
LCD_WriteCommand(lcdPosY);
LCD_WriteCommand(lcdPosX);
LCD_WriteCommand(0x30);
for (;basicBlock != 0; basicBlock--)
{
if(off_on==0) //關反白
{
LCD_WriteData(0x00);
}
else
{
LCD_WriteData(0xff);//開反白
}
}
lcdPosY++;
}
LCD_WriteCommand(0x36);
LCD_WriteCommand(0x30);
}
【STC15W408AS】驅動12864液晶.rar
2022-7-11 14:17 上傳
點擊文件名下載附件
40.23 KB, 下載次數: 10
作者:
zhb2004xp
時間:
2022-7-11 15:33
這種移植主要是因為芯片的運行速度不同導致的問題。需要查看12864數據時序,增加延時,或添加多個空函數達到延時效果!
作者:
herui2128
時間:
2022-7-11 16:08
謝謝,已經增加延時2MS解決了
作者:
caoxinri123
時間:
2022-7-11 16:09
時序不對
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人高潮片免费视频欧美
|
欧美一a一片一级一片
|
久久手机在线视频
|
欧美日韩在线一区二区三区
|
黄页网址在线观看
|
亚洲福利网
|
亚洲三区视频
|
成人小视频在线观看
|
国产精品久久久久久久免费大片
|
色精品视频
|
四虎影音
|
日韩福利片
|
福利视频二区
|
日韩在线免费视频
|
欧美成人一区二免费视频软件
|
日韩在线视频免费观看
|
久久国产精品免费
|
69精品久久久久久
|
九色视频网站
|
成人毛片在线观看
|
亚洲一二三区精品
|
国产一区三区视频
|
99久久久久
|
欧美性区
|
成人深夜福利
|
久久尤物免费一区二区三区
|
国产精品久久久久久久久久免费
|
精品国产鲁一鲁一区二区张丽
|
欧美一区二区三区久久精品视
|
精品久久一
|
国产一区二区在线免费视频
|
国产一区二区三区在线看
|
中文字幕精品一区二区三区精品
|
久久久久久亚洲精品不卡
|
国产乱码精品一区二区三区五月婷
|
亚洲一区精品在线
|
三级av免费
|
国产精品久久久久国产a级 欧美日本韩国一区二区
|
久久这里只有
|
午夜影院官网
|
免费一区二区三区
|