標(biāo)題:
請(qǐng)教一下,為什么lcd12864打點(diǎn)的時(shí)候會(huì)出現(xiàn)別的點(diǎn)
[打印本頁]
作者:
1234sf
時(shí)間:
2023-12-15 17:20
標(biāo)題:
請(qǐng)教一下,為什么lcd12864打點(diǎn)的時(shí)候會(huì)出現(xiàn)別的點(diǎn)
這是lcd的一些函數(shù)
void delay(unsigned int xms) //延時(shí)//
{
unsigned char i,j;
for(j = 0; j < xms; j++)
{
for(i = 0;i < 110;i++);
}
}
bit LcdBusyCheck(){
bit result;
LCD12864_RS = 0;
LCD12864_RW = 1;
LCD12864_EN = 1;
delay(1);
result = (bit)(DATA_PORT&0x80);
LCD12864_EN = 0;
return result;
}
void WriteCmdToLCD(unsigned char cmd)
{
while(LcdBusyCheck());
// delay(10);
LCD12864_RS = 0;
LCD12864_RW = 0;
LCD12864_EN = 1;
delay(1);
DATA_PORT = cmd;
// delay(5);
LCD12864_EN = 0;
// delay(5);
// LCD12864_EN = 1;
}
void WriteDatToLcd(unsigned char dat)
{
while(LcdBusyCheck());
// delay(10);
LCD12864_RS = 1;
LCD12864_RW = 0;
LCD12864_EN = 1;
delay(1);
DATA_PORT = dat;
// delay(5);
LCD12864_EN = 0;
// delay(5);
// LCD12864_EN = 1;
}
void WriteStrToLcd(unsigned char *str)
{
while(*str != '\0')
{
WriteDatToLcd(*str++);
delay(5);
}
}
unsigned char ReadLcd(void)
{
unsigned char dat;
//DATA_PORT=0xff;
while(LcdBusyCheck());
LCD12864_RS=1;
LCD12864_RW=1;
LCD12864_EN=0;
LCD12864_EN=1;
dat=DATA_PORT;
LCD12864_EN=0;
return dat;
}
void DrawDots(unsigned char i,unsigned char j)//打點(diǎn)函數(shù) //x,y為128*64 點(diǎn)陣的坐標(biāo)
{
unsigned char row,xlabel,xlabel_bit,x,y;
unsigned char Read_H=0,Read_L=0;
x = i+6;
y = 64-j-5;
WriteCmdToLCD(0x34); //擴(kuò)充指令
WriteCmdToLCD(0x36); //繪圖指令
xlabel=x>>4; //確定水平坐標(biāo)地址
xlabel_bit=x & 0x0F; // 細(xì)分水平坐標(biāo)中的第幾位
if(y<32) row=y;
else { row=y-32; xlabel+=8; }
WriteCmdToLCD(row+0x80);
WriteCmdToLCD(xlabel+0x80);
ReadLcd();
Read_H=ReadLcd();
Read_L=ReadLcd();
WriteCmdToLCD(row+0x80);
WriteCmdToLCD(xlabel+0x80); //水平坐標(biāo)地址+基址=顯示的水平地址
if(xlabel_bit<8)
{
// Read_H &=(~(0x01<<(7-xlabel_bit))); //變暗
Read_H |=(0x01<<(7-xlabel_bit)); //變亮
// Read_H = Read_H;
WriteDatToLcd(Read_H);
WriteDatToLcd(Read_L);
}
else
{
//Read_L &=(~(0x01<<(15-xlabel_bit))); //變暗
Read_L |=(0x01<<(15-xlabel_bit)); //變亮
// Read_L=Read_L;
WriteDatToLcd(Read_H);
WriteDatToLcd(Read_L);
}
// WriteDatToLcd(Read_H);
// WriteDatToLcd(Read_L);
WriteCmdToLCD(0x30);//恢復(fù)正常模式
}
void Clear_GDRAM() //清除GDRAM
{
unsigned char x,y;
for(y=0;y<64;y++)
{
for(x=0;x<16;x++)
{
WriteCmdToLCD(0x34);
WriteCmdToLCD(y+0x80); //先送垂直地址
WriteCmdToLCD(x+0x80); //后送水平地址
WriteCmdToLCD(0x30); //基本指令
WriteDatToLcd(0x00); //寫入數(shù)據(jù)0
WriteDatToLcd(0x00);
}
}
}
這是主函數(shù)里面的循環(huán)打點(diǎn)
for(i=5;i<50;i++)
{
DrawDots(i,i);
delay(100);
}
IMG_2669.JPG
(991.2 KB, 下載次數(shù): 34)
下載附件
2023-12-15 17:19 上傳
作者:
hspirit3
時(shí)間:
2023-12-16 08:21
可能延時(shí)不夠,或者打點(diǎn)過程中 被中斷打斷了
作者:
1234sf
時(shí)間:
2023-12-18 16:59
檢查了一下發(fā)現(xiàn)是讀取數(shù)據(jù)函數(shù)的問題unsigned char ReadLcd()
{
unsigned char dat = 0;
while(LcdBusyCheck());
DATA_PORT=0xff;
LCD12864_EN=0;
LCD12864_RS=1;
LCD12864_RW=1;
delay(1);
LCD12864_EN=1;
delay(1);
dat=DATA_PORT;
delay(1);
LCD12864_EN=0;
return dat;
}
但是不知道怎么糾正
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1