搜索
bottom↓
回复: 40

[原创]CVAVR下的ST7920的串行驱动,运行成功,拿出来晒晒,希望能去水分,越晒越好,哈哈

[复制链接]

出0入0汤圆

发表于 2006-3-18 17:45:05 | 显示全部楼层 |阅读模式
/*------------------------------------------------------------

FileName     : lcd.h

Created by   : ZhengYanbo

Created date : 2006.3.17

Last modified: 2006.3.17

Comments:    : serial drive for st7920

-------------------------------------------------------------*/



#ifndef __LCD_H__

#define __LCD_H__



#include "type.h"



//LCM122*32 pin define

#define CLK                 PORTC.5     //pc5

#define SID                 PORTC.4     //pc4

#define CS                  PORTB.4     //pb4



#define SET_CLK()           CLK = 1;

#define CLR_CLK()           CLK = 0;

#define SET_SID()           SID = 1;

#define CLR_SID()           SID = 0;

#define LCD_Enable()        CS = 1;

#define LCD_Disable()       CS = 0;



#define SID_PIN_IN()        DDRC.4 = 0;

#define SID_PIN_OUT()       DDRC.4 = 1;

#define CLK_PIN_OUT()       DDRC.5 = 1;

#define CS_PIN_OUT()        DDRB.4 = 1;



#define SID_PIN             PINC.4 //read pinx, not port!

#define LCD_Hi_Z()          DDRC &= 0xCF;            



//lcd serial command

//#define LCD_WRITE_COMMAND   0b11111000

//#define LCD_WRITE_DATA      0b11111010

//#define LCD_READ_STATUS     0b11111100

//#define LCD_READ_DATA       0b11111110



#define LCD_WRITE_COMMAND   0xF8

#define LCD_WRITE_DATA      0xFA

#define LCD_READ_STATUS     0xFC

#define LCD_READ_DATA       0xFE



void serial_write_byte(byte data);

byte serial_read_byte(void);



void LCDWriteCmd(byte command);

void LCDWriteData(byte data);

void InitLCD(void);

void LCD_Write_CGRAM(byte nBytes);

void LCD_Write_CGRAM(byte nBytes);

void writechar(byte value);

void writestring(byte flash *strn);

void gotoxy(byte line, byte position);

void LCDclrscr(void);

void blink(byte on_off);

void writeNumber(word value);



#endif





/*------------------------------------------------------------

FileName     : lcd.c

Created by   : ZhengYanbo

Created date : 2006.3.17

Last modified: 2006.3.17

Comments:    : serial drive for st7920

-------------------------------------------------------------*/



#include "lcd.h"

#include "type.h"



/*

flash byte CGRAM[128] =

{

//目录循环

0xE3,0x9E,0x91,0x11,0x89,0x11,0x89,0x1E,

0x89,0x14,0x91,0x12,0xE3,0x91,0x00,0x00,

0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,

0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,



//文件循环

0xEE,0x8F,0x84,0x88,0x84,0x88,0xE4,0x8E,

0x84,0x88,0x84,0x88,0x8E,0xEF,0x00,0x00,

0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x22,

0x40,0x42,0x3E,0xFC,0x00,0x40,0x00,0x20,



//随机模式

0xE1,0x1B,0x92,0x95,0x94,0x55,0xE7,0xD5,

0xA4,0x51,0x94,0x51,0x00,0x00,0x00,0x00,

0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,

0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,



//磁盘循环

0xCE,0x74,0xA4,0x84,0x94,0x85,0x94,0x66,

0x94,0x14,0xA4,0x16,0xCE,0xE5,0x00,0x00,

0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,

0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40

}; */



//**********************************************************

//用串行方式写一个字节数据到LCD

void serial_write_byte(byte data)

//**********************************************************

{

    byte i;

   

    //SID pin output mode

    SID_PIN_OUT();

    CLK_PIN_OUT();

    CS_PIN_OUT();

    for(i=0; i<8; i++)

    {

    if(data & 0x80)

     SET_SID();

    else

     CLR_SID();

    //send clk

    CLR_CLK();

    #asm("nop");

    SET_CLK();

    data<<=1;

    }

}



//**********************************************************

//以串行方式从LCD中读一个字节,返回数据

byte serial_read_byte(void)

//**********************************************************

{   

    byte i, temp=0;

   

    //SID pin input mode

    SID_PIN_IN();

    CLK_PIN_OUT();

    CS_PIN_OUT();

    for(i=0; i<8; i++)

    {

    temp<<=1;

    //send clk

    CLR_CLK();

    #asm("nop");

    SET_CLK();

    //wait pin steady

    #asm("nop");

    temp = (byte)SID_PIN;

    }

    return(temp);   

}



//**********************************************************

//读LCD的状态,读出BF信号

byte LCD_read_status(void)

//**********************************************************

{

    byte temp;

   

    LCD_Enable();

    //send 0b11111100

    serial_write_byte(LCD_READ_STATUS);

    //read upper 4 bits

    temp = serial_read_byte() & 0xF0;

    //read lower 4 bits

    temp = (serial_read_byte() & 0xF0)>>4 + temp;

    LCD_Disable();

    //return its value

    return(temp);

}



//**********************************************************

//忙信号BF检查

//返回: 1->success    0->error(time out)

byte check_busy(void)

//**********************************************************

{

    byte time_out;

   

    time_out=255;

    while(LCD_read_status()&0x80)

    {

    time_out--;

    //check time out

    if(time_out==0) return 0;

    };

    return 1;

}



//**********************************************************

//写命令到LCM

void LCDWriteCmd(byte command)

//**********************************************************

{   

    //not check BF state

    delay_us(100);

    LCD_Enable();

    //send 0b11111000

    serial_write_byte(LCD_WRITE_COMMAND);

    //write upper 4 bits

    serial_write_byte(command & 0xF0);

    //write lower 4 bits

    serial_write_byte((command<<4) & 0xF0);

    LCD_Disable();        

}



//**********************************************************

//写数据到LCM

void LCDWriteData(byte data)

//**********************************************************

{

    //not check BF state

    delay_us(100);

    LCD_Enable();

    //send 0b11111010

    serial_write_byte(LCD_WRITE_DATA);

    //write upper 4 bits

    serial_write_byte(data & 0xF0);

    //write lower 4 bits

    serial_write_byte((data<<4) & 0xF0);

    LCD_Disable();

}



//***********************************************************

//Initialize LCD, then print logo

void InitLCD(void)

//***********************************************************

{   

    delay_ms(50);       //Wait LCD ready

   

    LCDWriteCmd(0x30);  //function set

    delay_us(100);

    LCDWriteCmd(0x30);  //function set

    delay_us(100);

    LCDWriteCmd(0x0C);  //display on, cursor off

    delay_us(100);

    LCDWriteCmd(0x01);  //clear lcd

    delay_ms(10);

    LCDWriteCmd(0x06);  //Entry mode set

   

    //Write LCD CGRAM

    LCD_Write_CGRAM(128);      



    //Printing Logo

    //LCDclrscr();

    gotoxy(0,0);

    writestring("ST7920串行驱动");

    gotoxy(1,0);

    writestring("版本:Test v1.0");

    delay_ms(1000);

    //second screen

    LCDclrscr();

    writestring("设计:Datazyb");

    gotoxy(1,0);

    writestring("日期:2006.3.17");

}



//***********************************************************

void LCD_Write_CGRAM(byte nBytes)

//***********************************************************

{

    //Load user's font characters

    byte i;

   

    //Set CGram addres;                              

    LCDWriteCmd(0x40);

    //load CGRAM characters  

    for(i=0;i<nBytes;i++) LCDWriteData(CGRAM);  

}



//***********************************************************

void writechar(byte value)

//***********************************************************

{

    //Write 1 character

    //#asm("cli");

    LCDWriteData(value);

    //Set High status

    LCD_Hi_Z();

}



//***********************************************************

//Write a string from flash ROM

void writestring(byte flash *strn)

//***********************************************************

{   

    while (*strn!=0) writechar(*strn++);

}



//***********************************************************

//Gotoxy function. X=line number, Y=character position

void gotoxy(byte line, byte position)

//***********************************************************

{

    byte address;



    address=lcdLineStart[line]+position;

    LCDWriteCmd(address);

}



//***********************************************************

//Clear LCD

void LCDclrscr(void)

//***********************************************************

{

    LCDWriteCmd(0x01);

    delay_ms(5); //Writing cycle time is 4.6ms for LCD128X64.

}



//***********************************************************

//Setup curson blink, based on player state

void blink(byte on_off)

//***********************************************************

{

    //if on_off = 1 blink on, if on_off=0 blink off

    LCDWriteCmd(0x0C + (on_off & 1));

}



//***********************************************************

//Write a decimal number on LCD

void writeNumber(word value)

//***********************************************************

{

    byte temp[8],i=0;



    do {

    temp[i++]=value%10;

    value=value/10;

    }

    while (value>0);

    //start from back and print the number

    for(;i>0;) writechar(temp[--i]+48);

}



//end of lcd.c



我使用的是RT12232F型显示器,要特别注意跳线.请看下面的图:

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2006-3-18 17:48:45 | 显示全部楼层
还有个type define:



#ifndef _TYPE_H_

#define _TYPE_H_



typedef unsigned char   byte;

typedef unsigned int    word;

typedef unsigned long   dword;



#endif

出0入0汤圆

 楼主| 发表于 2006-3-18 17:55:02 | 显示全部楼层
我没有数码相机,干脆来个资料全集吧:



project files:

点击此处下载armok01108607.rar



说明:包里有整个CVAVR工程文件,直接使用CVAVR就可以直接编译,硬件连接在.h文件里自己看吧~~~~要换接口改变下接口定义.


-----此内容被elefan于2006-03-18,17:57:55编辑过

出0入0汤圆

发表于 2006-3-18 17:56:36 | 显示全部楼层
能做到一行任选几个字反白显示不?

能像LED一样左右移动不?

出0入0汤圆

 楼主| 发表于 2006-3-18 18:00:53 | 显示全部楼层
ST7920自身的指令并不好使用.任意几个字反白我暂时没做.移动还是自己写个函数吧!很简单

出0入0汤圆

发表于 2006-3-18 18:12:07 | 显示全部楼层
是的,我想用自带汉字库,反白只能是一行,不能任意,除非自己做字库以图形RAM来写。

移动?用它本身字库也是麻烦,不能一列快速移动,只能一个字一个字(16×16)移动,快了还不清,请问有什么好方法不?

出0入0汤圆

 楼主| 发表于 2006-3-18 18:15:35 | 显示全部楼层
几个字反白要利用绘图指令吧!具体我也没有做.你说的这种移动估计只有利用绘图才比较理想

出0入0汤圆

发表于 2006-3-18 18:21:30 | 显示全部楼层
GDRAM是可以的,但关键是字库不想自己做了。呵呵

出0入0汤圆

发表于 2006-3-20 08:46:27 | 显示全部楼层
好东西。

出0入0汤圆

发表于 2006-3-25 19:32:46 | 显示全部楼层
楼主可以发个接线图吗

接线方面有没有什么要注意的

我的弄不出来

出0入0汤圆

发表于 2006-3-26 16:43:55 | 显示全部楼层
请问楼主会问绘图模式吗

出0入0汤圆

 楼主| 发表于 2006-3-26 18:49:08 | 显示全部楼层
回question:在.h文件里定义线,另外要特别注意跳线.很简单,就3线.

出0入0汤圆

发表于 2006-4-10 11:22:50 | 显示全部楼层
好帖子,多谢elefan

我刚好有ATmega8515和ST7920(128*32),我用CVAVR1248d试过了程序,硬件可以正常运行

不过,我是刚刚学CVAVR的,所以大部分代码我都看不懂,学习学习

请问elefan,能告诉我你的邮箱吗?谢谢

出0入0汤圆

 楼主| 发表于 2006-4-10 14:23:30 | 显示全部楼层
Email: Datazyb_007@163.com

出0入0汤圆

发表于 2006-11-18 13:21:42 | 显示全部楼层
请教楼主是否试过用下面的子程序读出LCM的RAM数据?

下面子程序中 temp = (byte)SID_PIN;这句看不明白.



//**********************************************************

//以串行方式从LCD中读一个字节,返回数据

byte serial_read_byte(void)

//**********************************************************

{   

    byte i, temp=0;

     

    //SID pin input mode

    SID_PIN_IN();

    CLK_PIN_OUT();

    CS_PIN_OUT();

    for(i=0; i<8; i++)

    {

    temp<<=1;

    //send clk

    CLR_CLK();

    #asm("nop");

    SET_CLK();

    //wait pin steady

    #asm("nop");

    temp = (byte)SID_PIN;

    }

    return(temp);     

}

出0入0汤圆

发表于 2006-11-18 19:06:01 | 显示全部楼层
请问我的3v的LCDst7920怎么和5v的avr接呢?

是否可以用74HC245作隔离?

请教了!

谢谢!

出0入0汤圆

 楼主| 发表于 2006-11-19 22:02:48 | 显示全部楼层
to  GandF: 你终于指出了问题所在。



temp = (byte)SID_PIN;



应该是:



temp |= (byte)SID_PIN;



这个问题我后来才发现了,但是我没指出来,想让人指出这个问题。时间长了,后来就忘记了。对大家造成不便,深表歉意。



to okay51: 使用电阻分压最简单了。如下图:



+5V clk -|

        _|_

        | |1.8k

        | |

         -

         |____________+3V clk to lcd

        _|_

        | |

        | |3.3k

         -

         |

         |

       ------

        ---

         - gnd



数据线也这样连接。回读数据的时候,因为端口是高阻,所以逻辑依然正确。

出0入0汤圆

发表于 2006-11-20 03:25:27 | 显示全部楼层
我试过,一样读不出数据.是不是串口没法读数据?

出0入0汤圆

发表于 2006-12-7 19:58:28 | 显示全部楼层
多谢 elefan  非常感谢!

我就是担心回读 你说:回读数据的时候,因为端口是高阻,所以逻辑依然正确。  

我不大明白啊 请明示?谢谢

出0入0汤圆

 楼主| 发表于 2006-12-9 00:05:46 | 显示全部楼层
to  GandF:

我也没有成功过了,因为LCM是杂牌我也不能确定问题所在。



to  okay51:



当你回读数据的时候,AVR的IO端口为高阻抗,上面那1.8K的电阻不影响输入电平。

出0入0汤圆

发表于 2007-5-21 21:46:09 | 显示全部楼层
谢谢哇,买了个12864只会用并口!

出0入8汤圆

发表于 2007-5-21 23:36:11 | 显示全部楼层
#define SET_CLK()           CLK = 1;

这样行末有分号的宏定义行吗?在引用的时候又加了分号!

出0入0汤圆

发表于 2007-8-6 00:55:27 | 显示全部楼层
我也试了,没成功,程序贴出来,大家帮忙看看(液晶是阿莫这买的黄底黑字,程序是楼主的改的,M8 7.3728MHz)



/*------------------------------------------------------------

FileName     : lcd.h

Created by   : ZhengYanbo

Created date : 2006.3.17

Last modified: 2006.3.17

Comments:    : serial drive for st7920

-------------------------------------------------------------*/



#ifndef __LCD_H__

#define __LCD_H__



#include "type.h"



//LCM122*32 pin define

#define CLK                 PORTC.2     //pc2

#define SID                 PORTC.1     //pc1

#define CS                  PORTC.0     //pC0



#define SET_CLK()           CLK=1

#define CLR_CLK()           CLK=0

#define SET_SID()           SID=1

#define CLR_SID()           SID=0

#define LCD_Enable()        CS=1

#define LCD_Disable()       CS=0



#define SID_PIN_IN()        DDRC.1=0

#define SID_PIN_OUT()       DDRC.1=1

#define CLK_PIN_OUT()       DDRC.2=1

#define CS_PIN_OUT()        DDRC.0=1



#define SID_PIN             PINC.1  //read pinx, not port!

#define LCD_Hi_Z()          PORTC&=~0x07            



//lcd serial command

//#define LCD_WRITE_COMMAND   0b11111000

//#define LCD_WRITE_DATA      0b11111010

//#define LCD_READ_STATUS     0b11111100

//#define LCD_READ_DATA       0b11111110



#define LCD_WRITE_COMMAND   0xF8

#define LCD_WRITE_DATA      0xFA

#define LCD_READ_STATUS     0xFC

#define LCD_READ_DATA       0xFE



void serial_write_byte(byte data);

byte serial_read_byte(void);



void LCDWriteCmd(byte command);

void LCDWriteData(byte data);

void InitLCD(void);

void LCD_Write_CGRAM(byte nBytes);

void LCD_Write_CGRAM(byte nBytes);

void writechar(byte value);

void writestring(byte flash *strn);

void gotoxy(byte line, byte position);

void LCDclrscr(void);

void blink(byte on_off);

void writeNumber(word value);



#endif







/*------------------------------------------------------------

FileName     : lcd.c

Created by   : ZhengYanbo

Created date : 2006.3.17

Last modified: 2006.3.17

Comments:    : serial drive for st7920

-------------------------------------------------------------*/



#include "lcd.h"

#include "type.h"





//**********************************************************

//用串行方式写一个字节数据到LCD

void serial_write_byte(byte data)

//**********************************************************

{

    byte i;

   

    //SID pin output mode

    SID_PIN_OUT();

    CLK_PIN_OUT();

    CS_PIN_OUT();

    for(i=0; i<8; i++)

    {  

   

    if(data & 0x80)

     SET_SID();

    else

     CLR_SID();

     CLR_CLK();

    //wait pin steady

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    //send clk

    SET_CLK();

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    data<<=1;

    }

    CLR_CLK();

   

}



//**********************************************************

//以串行方式从LCD中读一个字节,返回数据

byte serial_read_byte(void)

//**********************************************************

{   

    byte i, temp=0;

   

    //SID pin input mode

    SID_PIN_IN();

    CLK_PIN_OUT();

    CS_PIN_OUT();

    for(i=0; i<8; i++)

    {

    temp<<=1;

    CLR_CLK();

    //wait pin steady

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    //send clk

    SET_CLK();

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    #asm("nop");

    temp |= (byte)SID_PIN;   

    }

    CLR_CLK();

    return(temp);   

}



//**********************************************************

//读LCD的状态,读出BF信号

byte LCD_read_status(void)

//**********************************************************

{

    byte temp;

   

    LCD_Enable();

    //send 0b11111100

    serial_write_byte(LCD_READ_STATUS);

    //read upper 4 bits

    temp = serial_read_byte() & 0xF0;

    //read lower 4 bits

    temp = (serial_read_byte() & 0xF0)>>4 + temp;

    LCD_Disable();

    //return its value

    return(temp);

}



//**********************************************************

//忙信号BF检查

//返回: 1->success    0->error(time out)

byte check_busy(void)

//**********************************************************

{

    int time_out;

   

    time_out=500;

    while(LCD_read_status()&0x80)

    {

    time_out--;

    //check time out

    if(time_out==0) return 0;

    };

    return 1;

}



//**********************************************************

//写命令到LCM

void LCDWriteCmd(byte command)

//**********************************************************

{   

    //not check BF state

    //delay_us(500);

    check_busy();

    LCD_Enable();

    //send 0b11111000

    serial_write_byte(LCD_WRITE_COMMAND);

    //write upper 4 bits

    serial_write_byte(command&0xF0);

    //write lower 4 bits

    serial_write_byte((command<<4)&0xF0);

    LCD_Disable();        

}



//**********************************************************

//写数据到LCM

void LCDWriteData(byte data)

//**********************************************************

{

    //not check BF state

    //delay_us(500);

    check_busy();

    LCD_Enable();

    //send 0b11111010

    serial_write_byte(LCD_WRITE_DATA);

    //write upper 4 bits

    serial_write_byte(data&0xF0);

    //write lower 4 bits

    serial_write_byte((data<<4)&0xF0);

    LCD_Disable();

}



//***********************************************************

void LCD_Write_CGRAM(byte nBytes)

//***********************************************************

{

    //Load user's font characters

    byte i;     

    //Set CGram addres;                              

    LCDWriteCmd(0x40);

    //load CGRAM characters  

    for(i=0;i<nBytes;i++) LCDWriteData(CGRAM);  

}



//***********************************************************

void writechar(byte value)

//***********************************************************

{

    //Write 1 character

    //#asm("cli");

    LCDWriteData(value);

    //Set High status

    LCD_Hi_Z();

}



//***********************************************************

//Write a string from flash ROM

void writestring(byte flash *strn)

//***********************************************************

{   

    while (*strn!=0) writechar(*strn++);

}



//***********************************************************

//Gotoxy function. X=line number, Y=character position

void gotoxy(byte line, byte position)

//***********************************************************

{

    byte address;

    address=lcdLineStart[line]+position;

    LCDWriteCmd(address);

}



//***********************************************************

//Clear LCD

void LCDclrscr(void)

//***********************************************************

{

    LCDWriteCmd(0x01);

    delay_ms(25); //Writing cycle time is 4.6ms for LCD128X64.

}



//***********************************************************

//Setup curson blink, based on player state

void blink(byte on_off)

//***********************************************************

{

    //if on_off = 1 blink on, if on_off=0 blink off

    LCDWriteCmd(0x0C + (on_off & 1));

}



//***********************************************************

//Write a decimal number on LCD

void writeNumber(word value)

//***********************************************************

{

    byte temp[8],i=0;



    do {

    temp[i++]=value%10;

    value=value/10;

    }

    while (value>0);

    //start from back and print the number

    for(;i>0;) writechar(temp[--i]+48);

}   



//***********************************************************

//Initialize LCD, then print logo

void InitLCD(void)

//***********************************************************

{   

    delay_ms(50);       //Wait LCD ready

    check_busy();

    LCDWriteCmd(0x30);  //function set

    delay_us(100);

    LCDWriteCmd(0x30);  //function set

    delay_us(100);

    LCDWriteCmd(0x0C);  //display on, cursor off

    delay_us(100);

    LCDWriteCmd(0x01);  //clear lcd

    delay_ms(10);

    LCDWriteCmd(0x06);  //Entry mode set      

    //Write LCD CGRAM

    LCD_Write_CGRAM(128);        

    //Printing Logo

    //LCDclrscr();

    gotoxy(0,0);

    writestring("ST7920串行驱动");

    gotoxy(1,0);

    writestring("版本:Test v1.0");

    delay_ms(1000);

    //second screen

    LCDclrscr();

    writestring("设计:Datazyb");

    gotoxy(1,0);

    writestring("日期:2006.3.17");

}





//end of lcd.c





#ifndef _GLOBAL_H_

#define _GLOBAL_H_



#include "type.h"



byte    key=0;

byte    key_code=0;

byte    intFlag=0;

byte    Menu_Layer=0;



byte    cursorPos=1;

byte    root_index=1;

byte    sub_index=1;

byte    sub_sub_index=1;



flash byte lcdLineStart[4]={0x80,0x90,0x88,0x98};



flash byte CGRAM[128] =

{

0x3E,0x38,0x7F,0x38,0xFF,0xB8,0xDD,0xB8,

0x9C,0xB8,0x1C,0x38,0x1C,0x38,0x1C,0x38,

0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1D,0x39,

0x1D,0xBB,0x1D,0xFF,0x1C,0xFE,0x1C,0x7C,

   

//play char

0x1C,0x00,0x1E,0x00,0x1F,0x00,0x1F,0x80,

0x1F,0xC0,0x1F,0xE0,0x1F,0xF0,0x1F,0xF8,

0x1F,0xF8,0x1F,0xF0,0x1F,0xE0,0x1F,0xC0,

0x1F,0x80,0x1F,0x00,0x1E,0x00,0x1C,0x00,

   

//stop char

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,

0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,

0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,

0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,

   

//pause char

0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,

0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,

0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,

0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00

};



#endif





/*----------------------------------------------------------

;CodeVisionAVR C Compiler V1.24.7c Professional

;(C) Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.

;http://www.hpinfotech.com



;Chip type              : ATmega8L

;Program type           : Application

;Clock frequency        : 16.000000 MHz

;Memory model           : Small

;Optimize for           : Size



CPU : MEGA8

CLK : 12MHz

Test:

Last Access Date: 2006.3.17

-------------------------------------------------------------*/



#include <mega8.h>

#include "type.h"

#include "global.h"

#include "lcd.h"

#include <delay.h>





void main (void)

//*************************************************

{

unsigned char i;

            

InitLCD();

delay_ms(1000);



while(1)

{   

    LCDclrscr();

    gotoxy(2,0);

    writestring("终于看到你了!");

    LCD_Enable();

    delay_ms(2000);     

}





}//main loop

出0入0汤圆

发表于 2007-12-2 16:59:42 | 显示全部楼层
谢谢elefan,程序完全可以使用的,我和m162也可以正常使用,请大家放心使用,不过有谁能写出汉字移动的函数,谢谢拉

出0入0汤圆

发表于 2007-12-11 09:03:55 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2008-3-5 15:22:47 | 显示全部楼层
汉字移动可以上下,不可以左右

出0入0汤圆

发表于 2008-3-5 15:30:12 | 显示全部楼层
还有个问题,我用mega48的硬件SPI驱动ST7920,只写模式,英文字母显示都没有问题,汉字显示有不少不能显示出来,会是什么原因呢?

还有就是datasheet说的cgram的设置和写入,按照st7920的demo程序翻译成C都不行啊。

出0入0汤圆

发表于 2008-3-5 19:30:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-3-6 20:20:39 | 显示全部楼层
好贴,顶一下

出0入0汤圆

发表于 2008-5-6 10:09:56 | 显示全部楼层
hao

出0入0汤圆

发表于 2008-6-2 19:31:42 | 显示全部楼层
串行真的能读???
试试先,嘻嘻,谢谢了

出0入0汤圆

发表于 2008-9-15 14:45:04 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-1-8 16:32:12 | 显示全部楼层
MMAARRKK

出0入0汤圆

发表于 2009-2-24 21:53:55 | 显示全部楼层
我想问一下,到底串行液晶可不可以读取数据呢?

出0入0汤圆

发表于 2010-5-12 15:40:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-17 09:36:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-17 11:00:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-29 19:20:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-13 13:31:03 | 显示全部楼层
mark!

出0入0汤圆

发表于 2012-2-25 23:38:08 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 00:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表