free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問答首頁 最新問題 熱門問題 等待回答標(biāo)簽廣場
我要提問

LCD

LCD12864程序無法顯示

主控為ST7920的12864.由于手頭上Mega8 I/O口不夠,只好用PC0-PC3接DB0~3口,PD0~3接DB4~7口。PSB寫高電平,用并行輸入。

    12864一直沒反應(yīng),求路過的高手幫忙看看,指點迷津。以下是程序:

#include

#include "lcd12864.h"

#define uchar unsigned char

#define uint unsigned int

#define DB0  PC0

#define DB1  PC1

#define DB2  PC2

#define DB3  PC3

#define DB4  PD0

#define DB5  PD1

#define DB6  PD2

#define DB7  PD3

#define LCD_RS  PD7

#define LCD_RW  PD6

#define LCD_EN  PD5

#define LCD_RET PC6//接Mega8 RESET口,低電平有效

#define SET_DATA()  (1<#define SET_INC()   (~(1<#define SET_READ()  (1<#define SET_WRITE() (~(1<#define SET_EN()    (1<#define CLR_EN()    (~(1

{

   uchar a;

   a=((PINC&0x0f)|((PIND&0x0f)<<4));

   return a;

}

void LCD_DataPort(uchar Data)

{

     if(Data&0x80) PORTD|=(1<     if(Data&0x40) PORTD|=(1<     if(Data&0x20) PORTD|=(1<     if(Data&0x10) PORTD|=(1<     if(Data&0x08) PORTC|=(1<     if(Data&0x04) PORTC|=(1<     if(Data&0x02) PORTC|=(1<     if(Data&0x01) PORTC|=(1<}

void LCD_CheckBusy(void)

{

   uint temp,Timeout=0;

   SET_INC();

   SET_READ();

   CLR_EN();

   SET_EN();

   Delay(5);

      temp=LCD_DataPortRead();

   CLR_EN();

   while((temp&0x80)&&(++Timeout!=0));

}

void LCD_SendCmd(uchar Cmd)

{

      LCD_CheckBusy();

   SET_INC();

   SET_WRITE();

   SET_EN();

   LCD_DataPort(Cmd);

   _delay_us(100);  

   CLR_EN();

}

void LCD_SendData(uchar Data)

{

      LCD_CheckBusy();

   SET_DATA();

   SET_WRITE();

   SET_EN();

   

   LCD_DataPort(Data);

   Delay(5);

   CLR_EN();

}

void Delay(uint z)

{

   uint x,y;

   for(x=z;x>0;x--)

    for(y=110;y>0;y--);

}

void LCD_Init(void)

{     

      Delay(50);

   LCD_SendCmd(0x30); //基本指令集

   Delay(5);

   LCD_SendCmd(0x30);

   Delay(5);

   LCD_SendCmd(0x0c); //開顯示

   Delay(5);

   LCD_SendCmd(0x01); //清屏

   Delay(5);

   LCD_SendCmd(0x06); //光標(biāo)右移

}

void LCD_SetAddress(uchar x,uchar y)

{

      uchar Address;

   switch(y)

   {

     case 0: Address=0x80+x;break;

  case 1: Address=0x90+x;break;

  case 2: Address=0x88+x;break;

  case 3: Address=0x98+x;break;

  default:

  break;

   }

   LCD_SendCmd(Address);

}

void LCD_PutString(uchar x,uchar y,uchar *pData)

{

       LCD_SetAddress(x,y);

    while(*pData!='\0')

    {

      LCD_SendData(*pData++);

    }

}

主程序如下:

#include

#include

#include "lcd12864.h"

#define uchar unsigned char

#define uint unsigned int

void Port_Init(void)

{

  DDRB = 0xEC;

  PORTB =0xF3;

  DDRC = 0x0F; //PC0~3設(shè)置輸出,無上拉

  PORTC =0xF0;

  DDRD = 0x0F;

  PORTD =0xF0;

}

void main(void)

{

  Port_Init();

  PORTB|=(1<  

  LCD_Init();

  while(1)

{

  LCD_PutString(2,0,"12864");

  Delay(500);

  LCD_PutString(2,1,"OK");

  LCD_PutString(0,2,"LCD12864ST7920");

  LCD_PutString(0,3,"★○◇◆※☆■△");

  }

}

提問者:fous2012 地點:- 瀏覽次數(shù):11834 提問時間:05-10 14:44
我有更好的答案
提 交
5條回答
jjfuwerwer 05-15 22:26
看來好幾遍,只有接口跟例程有些不一樣:void LCD_DataPort(uchar Data)
{
? ???if(Data&0x80) PORTD|=(1<? ???if(Data&0x40) PORTD|=(1<? ???if(Data&0x20) PORTD|=(1<? ???if(Data&0x10) PORTD|=(1<? ???if(Data&0x08) PORTC|=(1<? ???if(Data&0x04) PORTC|=(1<? ???if(Data&0x02) PORTC|=(1<? ???if(Data&0x01) PORTC|=(1<}
莫非是這樣把數(shù)據(jù)拆了 分別賦值 不能用并口通訊?
該怎么起名字呢 05-17 10:48
你這個賦值,錯了吧?你自己看看
野性Rude 05-19 03:56
在使能前調(diào)這個函數(shù)賦值,你這樣PC0上電平變化比PD3上慢幾十個us,怎么能把正確值寫進去
xiaokanchenfu 05-10 16:56
謝謝LS兩位,這樣賦值的確是不對的,不過還有其他地方有錯,還在改。
gvjhvbc 05-14 16:24
什么叫一直沒有反應(yīng)呢?
讀 READY 信號, 有沒有反應(yīng)呢? 如果一直沒有 READY, 會不會上拉和時序方面的問題.
如果有 READY, 正常寫了, 會不會液晶的對比度負壓沒有調(diào)好?
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)LCD
力信LCD開關(guān)電源電路
LCD背光閃爍
請教LCD背光引腳
關(guān)于LCD信號傳輸接口的資料
無控制器的LCD模塊,請教用SMC51542將LP分頻為M信號怎么設(shè)置?