搜索
bottom↓
回复: 8

菜鸟版:KS0108-12864-74HC595-GCC驱动

[复制链接]

出10入210汤圆

发表于 2006-7-8 00:22:24 | 显示全部楼层 |阅读模式
MCU:ATMEGA8515L8PI

串口->并口IC:SN74HC595N*2片

LCM:SSC12A64DLYY(KS0108)



WINAVR20060421



PINB2     数据----------SN74HC595 14#

PINB1     锁存时钟------SN74HC595 12#

PINB0     移位时钟------SN74HC595 11#



第一级595与LCD的控制脚相连

lcd12864_rs        0x01                //QA

lcd12864_rw        0x02                //QB

lcd12864_e                0x04                //QC

lcd12864_cs1        0x08                //QD

lcd12864_cs2        0x10                //QE

lcd12864_rst        0x20                //QF



第二级的595与LCD的数据脚相连



D0------QA

|       |

D7      QG



字模程序是PCtoLCD2002





此程序看起来比较乱,但是保证能用,目前只能显示128*64的图片、清屏及全显示三个功能,今天天太晚了,其它功能明天再加。

makefile自己加。



另此程序在编译时有一个警告:

warning: passing arg 1 of `disp_image' discards qualifiers from pointer target type



但不影响执行结果,不知怎样才能没有这个警告,还请高手指点。





程序的全部代码如下:

#include <avr/io.h>

#include <compat/deprecated.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#include <avr/pgmspace.h>





unsigned char sn74595_buf[2];



const unsigned char first_image[] PROGMEM={

/*-- 宽度x高度=128x64 --*/

0x00,0x00,0x60,0x70,0x78,0x78,0x38,0x38,0xF8,0xFC,0x3C,0x1C,0x1C,0x1C,0x1C,0xB8,

0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,

0xC0,0xF0,0xF8,0xFC,0x7C,0x3E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x90,0xF8,0x78,0x3C,0x7E,0x7F,0xF5,0xE4,0xE6,0xC6,0xC6,0xC7,0x83,0x03,

0x03,0x01,0xF0,0xF8,0xF8,0xDC,0xCE,0xE6,0xFF,0xFF,0x9F,0xC3,0x40,0xF0,0xF8,0xFC,

0x9E,0x8E,0xF6,0xF8,0xFC,0xFC,0xB4,0xF8,0xFC,0xBE,0xCE,0x46,0x00,0xF8,0xFE,0xFF,

0x8F,0xF7,0xFB,0x7D,0x7C,0xF4,0xF8,0xFC,0x8E,0xC6,0xFE,0x7E,0x7C,0x20,0xF0,0xF8,

0xFC,0xDE,0xEF,0xF7,0xF8,0xFC,0xDE,0xF6,0x7C,0x7E,0x7E,0x20,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x83,

0x80,0x60,0xA0,0xF1,0x59,0xD9,0xC0,0x01,0x41,0xB1,0xE1,0xE0,0x00,0x00,0x01,0x01,

0x01,0x01,0x00,0x01,0x01,0x00,0xF1,0x81,0x81,0x01,0x00,0x00,0x00,0x80,0x81,0x81,

0x81,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x80,0x60,0x3C,0xB8,0xD9,

0xC1,0xC1,0xC0,0x80,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,

0xE0,0xE0,0xE0,0x40,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0xF0,0xE0,0x00,0x00,0xC0,0x80,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x38,0x98,

0x8F,0xCC,0xE6,0x7F,0x52,0x23,0x18,0x04,0x33,0x3B,0xAE,0xEC,0x40,0x00,0x00,0x00,

0x00,0x00,0x02,0x1E,0x3E,0xB3,0xFF,0xD9,0xDF,0x03,0xE0,0xE1,0x73,0x7F,0x7F,0x61,

0x61,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x6F,0xFC,0x7F,0x34,

0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x1C,0xFA,0xFD,

0xDD,0x4E,0x76,0x76,0xEC,0xE6,0x7F,0x87,0x01,0xF1,0x7F,0x0F,0x00,0x00,0x00,0x00,

0x00,0x00,0x38,0x3C,0xFF,0xE7,0x33,0x00,0x00,0xFF,0xFF,0x1C,0x0E,0x07,0x03,0x01,

0x80,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,

0xE1,0x21,0x21,0x26,0x60,0x40,0x08,0x04,0xC4,0xE2,0x23,0x21,0x20,0x60,0x40,0x00,

0x00,0x80,0xC1,0x63,0x23,0x21,0x20,0x60,0x41,0x00,0x80,0xC0,0xE0,0xE0,0x00,0x00,

0x40,0x60,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0x80,0xE0,0x61,0xE3,0x83,0x03,0x01,

0x83,0xC7,0x2F,0x23,0x60,0x40,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0xE1,

0xE0,0x20,0x20,0x62,0xC1,0x80,0x00,0x03,0xE3,0xE1,0x00,0x00,0x00,0x00,0x00,0x60,

0xE0,0x80,0x00,0x00,0x81,0xE3,0x60,0x60,0xE0,0x80,0x01,0x03,0x83,0xE3,0x63,0x03,

0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,

0x63,0x47,0x46,0x4E,0x7C,0x38,0x00,0x00,0x21,0x63,0x47,0x46,0x4E,0x7C,0x38,0x00,

0x00,0x1F,0x3F,0x60,0x40,0x40,0x40,0x60,0x20,0x00,0x01,0x00,0x7F,0x7F,0x00,0x00,

0x60,0x70,0x5C,0x4E,0x47,0x41,0x00,0x60,0x7C,0x1F,0x13,0x10,0x13,0x1F,0x7C,0x60,

0x3F,0x7F,0x42,0x42,0x7E,0x3C,0x00,0x18,0x16,0x11,0x7F,0x7F,0x10,0x00,0x00,0x7F,

0x7F,0x40,0x40,0x60,0x3F,0x1F,0x00,0x00,0x7F,0x7F,0x40,0x40,0x40,0x40,0x00,0x00,

0x00,0x03,0x7F,0x7F,0x03,0x00,0x00,0x00,0x00,0x03,0x7F,0x7F,0x03,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x40,0xC4,0x88,0x00,0xF8,0xE8,0x08,0xF8,0x00,0xF0,0x00,0xFE,0x00,0x00,0x00,0x00,

0x80,0x88,0x98,0x80,0x40,0x40,0x7C,0xC0,0x40,0x20,0x08,0x18,0x00,0x00,0x00,0x00,

0x48,0x28,0xA4,0xFC,0xA2,0xA2,0xFC,0xA4,0xA4,0xA4,0xBC,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xFC,0x08,0x48,0x48,0xAA,0xA4,0x64,0x24,0x04,0x04,0x00,0x00,0x08,0x18,

0x78,0xC8,0x08,0x00,0x00,0x08,0xE8,0x18,0x08,0x00,0x00,0x10,0xF8,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x18,0x08,0x08,0x18,0xE0,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x10,0x0C,0x43,0x20,0x1F,0x07,0x10,0x2F,0x00,0x27,0x40,0x7F,0x00,0x00,0x00,0x00,

0x00,0x00,0x3F,0x32,0x32,0x1E,0x11,0x0F,0x18,0x20,0x40,0x78,0x00,0x00,0x00,0x00,

0x06,0x01,0x00,0x7F,0x20,0x20,0x24,0x24,0x3F,0x24,0x24,0x20,0x00,0x00,0x00,0x40,

0x30,0x0F,0x00,0x00,0x01,0x21,0x41,0x7F,0x01,0x01,0x05,0x03,0x00,0x00,0x00,0x00,

0x00,0x03,0x0E,0x38,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,

0x00,0x00,0x10,0x10,0x00,0x00,0x07,0x18,0x10,0x10,0x18,0x07,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

/* 定义I/O口*/

#define SN74HC595_PORT     PORTB

#define SN74HC595_DATA   PINB2 ////数据-------SN74HC595 14#

#define ST     PINB1             ////锁存时钟------SN74HC595 12#

#define SH     PINB0        ////移位时钟-----SN74HC595 11#





#define lcd12864_data sn74595_buf[1]



/*SN74HC595第一级与LCD12864的连接定义*/

#define lcd12864_rs                0x01                //QA

#define lcd12864_rw                0x02                //QB

#define lcd12864_e                0x04                //QC

#define lcd12864_cs1        0x08                //QD

#define lcd12864_cs2        0x10                //QE

#define lcd12864_rst        0x20                //QF



#define disp_off        0x3e

#define disp_on                0x3f

#define col_add                0x40

#define page_add        0xb8

#define start_line        0xc0



#define set_lcd12864_rs                {\

                                                                sn74595_buf[0]|=lcd12864_rs;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_rs                {\

                                                                sn74595_buf[0]&=~lcd12864_rs;\

                                                                out_to_595();\

                                                        }

#define set_lcd12864_rw                {\

                                                                sn74595_buf[0]|=lcd12864_rw;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_rw                {\

                                                                sn74595_buf[0]&=~lcd12864_rw;\

                                                                out_to_595();\

                                                        }

#define set_lcd12864_e                {\

                                                                sn74595_buf[0]|=lcd12864_e;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_e                {\

                                                                sn74595_buf[0]&=~lcd12864_e;\

                                                                out_to_595();\

                                                        }

#define set_lcd12864_cs1        {\

                                                                sn74595_buf[0]|=lcd12864_cs1;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_cs1        {\

                                                                sn74595_buf[0]&=~lcd12864_cs1;\

                                                                out_to_595();\

                                                        }

#define set_lcd12864_cs2        {\

                                                                sn74595_buf[0]|=lcd12864_cs2;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_cs2        {\

                                                                sn74595_buf[0]&=~lcd12864_cs2;\

                                                                out_to_595();\

                                                        }

#define set_lcd12864_rst        {\

                                                                sn74595_buf[0]|=lcd12864_rst;\

                                                                out_to_595();\

                                                        }

#define clr_lcd12864_rst        {\

                                                                sn74595_buf[0]&=~lcd12864_rst;\

                                                                out_to_595();\

                                                        }







//static const unsigned char num[62][8]={};





void delay_us(unsigned int us)            /////8M晶震,1us延时

{

        while(us--)

        {

                _delay_us(1);

        }

}



void delay_ms(unsigned int ms)

{

        while(ms--)

        {

                _delay_ms(1);

        }

}



//送出8位串行数据

void out_to_595(void)

{

        unsigned char i;

        unsigned char j;

        unsigned sn74595_buf_temp[2];

        sn74595_buf_temp[0]=sn74595_buf[1];

        sn74595_buf_temp[1]=sn74595_buf[0];

        cbi(SN74HC595_PORT,ST);  ////拉低锁存电平

        for(j=0;j<2;j++)

        {

               

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

                {

                        cbi(SN74HC595_PORT,SH);  ////拉低移位时钟

                        if (sn74595_buf_temp[j]&0x80)

                        {

                                sbi(SN74HC595_PORT,SN74HC595_DATA);

                        }

                        else

                        {

                                cbi(SN74HC595_PORT,SN74HC595_DATA);

                        }

                        sn74595_buf_temp[j]<<=1;

                        sbi(SN74HC595_PORT,SH);  ////提高移位时钟

                }

  }

        sbi(SN74HC595_PORT,ST);  ////提高锁存电平(锁存)

}





void write_lcd12864(unsigned char CMD,unsigned char data)

{

        if(1==CMD)

        {

                clr_lcd12864_rs;

        }

        else

        {

                set_lcd12864_rs;

        }

        clr_lcd12864_rw;

       

        lcd12864_data=data;

        //_delay_us(1);

        set_lcd12864_e;

        //_delay_us(1);

        clr_lcd12864_e;

}



void disp_image(unsigned char *image,unsigned char fan)

{

        unsigned char j,k;

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

        {

                set_lcd12864_cs1;

                clr_lcd12864_cs2;

                _delay_us(100);

                write_lcd12864(1,page_add+k);

                write_lcd12864(1,col_add+0);

                for(j=0;j<64;j++)

                {

                        if(1==fan)

                        {

                                write_lcd12864(0,~pgm_read_byte(image+(k*128+j)));

                        }

                        else

                        {

                                write_lcd12864(0,pgm_read_byte(image+(k*128+j)));

                        }

                }

                set_lcd12864_cs2;

                clr_lcd12864_cs1;

                _delay_us(100);

                write_lcd12864(1,page_add+k);

                write_lcd12864(1,col_add+0);

                for(j=64;j<128;j++)

                {

                        if(1==fan)

                        {

                                write_lcd12864(0,~pgm_read_byte(image+(k*128+j)));

                        }

                        else

                        {

                                write_lcd12864(0,pgm_read_byte(image+(k*128+j)));

                        }

                }

        }

}



void lcd_init(void)

{

        sn74595_buf[0]=0x00;

        sn74595_buf[1]=0x00;

        clr_lcd12864_rst;

        //delay_ms(1);

        set_lcd12864_rst;

        delay_ms(1);

        set_lcd12864_cs1;

        set_lcd12864_cs2;

        write_lcd12864(1,disp_off);

        write_lcd12864(1,page_add+0);

        write_lcd12864(1,start_line+0);

        write_lcd12864(1,col_add+0);

        write_lcd12864(1,disp_on);

}



void full(void)

{

        unsigned char i,j;

       

        set_lcd12864_cs1;

        set_lcd12864_cs2;

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

        {

                write_lcd12864(1,page_add+i);

                for(j=0;j<64;j++)

                {

                        write_lcd12864(0,0xff);

                }

        }

}



void cls(void)

{

        unsigned char i,j;

       

        set_lcd12864_cs1;

        set_lcd12864_cs2;

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

        {

                write_lcd12864(1,page_add+i);

                for(j=0;j<64;j++)

                {

                        write_lcd12864(0,0x00);

                }

        }

}



int main(void)

{

        DDRB|=0x07;

        lcd_init();

        while(1)

        {

                full();

                delay_ms(500);

                cls();

                delay_ms(500);

                disp_image(first_image,0);

                delay_ms(5000);

                disp_image(first_image,1);

                delay_ms(5000);

                cls();

                delay_ms(500);

        }

}

出0入0汤圆

发表于 2006-7-8 16:14:23 | 显示全部楼层
不错啊,不知道这样刷屏的速度是否跟的上?一秒可以刷多少次?

而且这样连接就没办法读屏咯

出10入210汤圆

 楼主| 发表于 2006-7-8 20:04:48 | 显示全部楼层
速度是不快,8M时钟有6HZ左右,也不能读,只有一个好处-----三线式。
-----此内容被rainbow于2006-07-08,20:10:33编辑过

出10入210汤圆

 楼主| 发表于 2006-7-8 21:38:49 | 显示全部楼层
谢谢版主将此贴变酷,我这才真正的有点成就感。收了这么多的资料今天才有一点成果与大家分享,惭愧啊!

出10入210汤圆

 楼主| 发表于 2006-7-11 23:37:02 | 显示全部楼层
完善功能:

  实现ASCII码直接输出,汉字直接输出,整型数值直接输出(参考M8控制的直流电源中程序)。



    函数格式:

        puts(0,0,"Address:",0); //在第一行开始位置显示Address:字符串,不反白

             注:若屏幕布位置超出64会自动换右半屏,超出128会自动换下一行,超出第4行会自动转到第1行显示。

        put_int(2,88,8888,0,4);//在第2行第88列处显示8888



        put_hz(6,0,"彩",0);//在第4行第0列显示“彩”字。

点击此处下载armok01122948.rar

出0入0汤圆

发表于 2007-7-26 22:35:36 | 显示全部楼层
谢谢共享

出0入0汤圆

发表于 2007-8-6 16:49:43 | 显示全部楼层
请问楼主有没有直接驱动这款LCD的程序啊

我有一块内置了HD61202的LCM

有的话给我邮箱发一下

imgxygxy@gmail.com

多谢!!!

出0入0汤圆

发表于 2011-9-26 11:35:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-26 11:39:11 | 显示全部楼层
請問樓主,回复【2楼】rainbow 老陈
速度是不快,8m时钟有6hz左右,也不能读,只有一个好处-----三线式。
-----此内容被rainbow于2006-07-08,20:10:33编辑过

-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-5-7 19:03

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

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