历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2020年03月30日 | 基于ATMEGA8515的SPI驱动ST7565P液晶屏的程序

2020-03-30 来源:eefocus

这是用SPI方式来驱动12864液晶的源程序,液晶屏的控制芯片为ST7565P经测试SPI的时钟可达到振荡频率的二分频。比用普通IO口模拟串行的方式快多了。。。 

下面贴出源代码,有详细注释。。。。 

本程序简单实用,可拿去作简单参考。。。。 

编译环境:GCC+AVR STUDIO 

单片机:ATMEGA 8515 

晶振:  3.6864M 

#include      //包含头文件 

#include 

#define   COMMAND    1 

#define   DATA      0 

///////////////////////////////////////// 

//数据线定义: 

// SI==========PB5 // 

// A0==========PC0 

// CS==========PC2 

// RES=========PC1 

// SCL=========PB7 

// 

///////////////////////////////////////// 

unsigned char gushi[8][112]PROGMEM= 

{0x10,0x10,0x92,0x92,0x92,0xF2,0x9E,0x92,0x92,0x92,0x92,0x92,0xFE,0x10,0x10,0x00,  //君问归期未有期 

0x00,0x00,0xF8,0x01,0x06,0xE0,0x22,0x22,0x22,0x22,0xE2,0x02,0x02,0xFE,0x00,0x00, 

0x00,0xF8,0x00,0x00,0xFF,0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00, 

0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00, 

0x40,0x40,0x48,0x48,0x48,0x48,0xC8,0xFF,0x48,0x48,0x48,0x48,0x48,0x40,0x40,0x00, 

0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00, 

0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00}, 

{0x40,0x20,0x10,0x0C,0xFE,0x45,0x44,0x44,0x44,0x44,0x44,0x44,0xFD,0x00,0x00,0x00, 

0x00,0x00,0xFF,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x03,0x40,0x80,0x7F,0x00,0x00, 

0x00,0x87,0x40,0x30,0x0F,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x00,0x00, 

0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00, 

0x20,0x20,0x10,0x10,0x08,0x06,0x01,0xFF,0x01,0x02,0x04,0x08,0x18,0x30,0x10,0x00, 

0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00, 

0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00}, 

{0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,  //巴山夜雨涨池 

0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, 

0x04,0x04,0x84,0xC4,0x3C,0x14,0x85,0x66,0xBC,0x24,0x24,0x24,0xE4,0x24,0x04,0x00, 

0x02,0x02,0xF2,0x32,0x52,0x92,0x12,0xFE,0x32,0x52,0x92,0x12,0xF2,0x02,0x02,0x00, 

0x10,0x61,0x86,0x60,0xF2,0x12,0x12,0x1E,0x80,0xFF,0xA0,0x90,0x88,0x86,0x80,0x00, 

0x24,0x24,0xE4,0xFC,0xA2,0x22,0x22,0x80,0x70,0x00,0xFF,0x40,0x20,0x18,0x00,0x00, 

0x10,0x60,0x02,0x8C,0x60,0x80,0xF8,0x40,0x40,0xFE,0x20,0x20,0x10,0xF0,0x00,0x00}, 

{0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x20,0x00, 

0x00,0x20,0x7F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00, 

0x02,0x01,0x00,0xFF,0x00,0x82,0x41,0x22,0x14,0x09,0x14,0x23,0x40,0xC0,0x40,0x00, 

0x00,0x00,0xFF,0x01,0x02,0x04,0x00,0x7F,0x01,0x02,0x44,0x80,0x7F,0x00,0x00,0x00, 

0x04,0xFC,0x03,0x00,0x01,0x41,0x81,0x7F,0x00,0xFF,0x42,0x0C,0x30,0x60,0x20,0x00, 

0x02,0x01,0x00,0xFF,0x00,0x83,0x40,0x20,0x18,0x07,0x01,0x06,0x18,0xE0,0x40,0x00, 

0x08,0x08,0x7C,0x03,0x00,0x00,0x3F,0x40,0x40,0x5F,0x40,0x42,0x44,0x43,0x70,0x00}, 

{0x80,0x40,0xF0,0x1C,0x07,0xE2,0x24,0x24,0x24,0xE4,0x04,0x04,0xFC,0x04,0x04,0x00,  //何当共剪西窗烛 

0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00, 

0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00, 

0x00,0x04,0xF4,0x54,0x55,0x56,0x54,0xF4,0x04,0x04,0xE6,0x05,0x04,0xF4,0x04,0x00, 

0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00, 

0x00,0x4C,0x44,0xE4,0x54,0x44,0x64,0xD5,0x46,0x44,0x4C,0x54,0xD4,0x24,0x2C,0x00, 

0x80,0x60,0x00,0xFF,0x20,0x18,0xF0,0x10,0x10,0xFF,0x12,0x10,0xF0,0x10,0x00,0x00}, 

{0x00,0x00,0x7F,0x00,0x00,0x07,0x02,0x02,0x02,0x07,0x20,0x40,0x3F,0x00,0x00,0x00,  

0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00, 

0x02,0x02,0x82,0x42,0x32,0x1F,0x0A,0x02,0x02,0x06,0x0B,0x32,0xE2,0x42,0x02,0x00, 

0x00,0x08,0x8F,0x89,0x49,0x2B,0x1D,0x0B,0x08,0x08,0x08,0x4A,0x8C,0x7B,0x00,0x00, 

0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00, 

0x00,0x00,0x00,0xFF,0x44,0x62,0x55,0x49,0x55,0x43,0x41,0x40,0xFF,0x00,0x00,0x00, 

0x40,0x20,0x18,0x07,0x04,0x28,0x63,0x21,0x21,0x3F,0x11,0x15,0x1B,0x30,0x00,0x00}, 

{0x80,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,  //却话巴山夜雨时 

0x40,0x41,0x4E,0xC4,0x00,0x20,0x24,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x20,0x00, 

0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00, 

0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, 

0x04,0x04,0x84,0xC4,0x3C,0x14,0x85,0x66,0xBC,0x24,0x24,0x24,0xE4,0x24,0x04,0x00, 

0x02,0x02,0xF2,0x32,0x52,0x92,0x12,0xFE,0x32,0x52,0x92,0x12,0xF2,0x02,0x02,0x00, 

0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00}, 

{0x00,0x10,0x3C,0x13,0x10,0x08,0x0A,0x1C,0x08,0xFF,0x00,0x08,0x10,0x0F,0x00,0x00, 

0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x7E,0x22,0x22,0x23,0x22,0x22,0x7E,0x00,0x00, 

0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x20,0x00, 

0x00,0x20,0x7F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00, 

0x02,0x01,0x00,0xFF,0x00,0x82,0x41,0x22,0x14,0x09,0x14,0x23,0x40,0xC0,0x40,0x00, 

0x00,0x00,0xFF,0x01,0x02,0x04,0x00,0x7F,0x01,0x02,0x44,0x80,0x7F,0x00,0x00,0x00, 

0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00}, 

}; 

//////////////////////////////// 

//发送一个字节到ST7565P并等待发送完毕 

//入口:要发送的字节 

//返回值:无 

//////////////////////////////// 

void SPIByte(unsigned char byte)   

     SPDR =byte;    //写数据 

    while(!(SPSR &(1<

//////////////////////////////////////////////// 

//将一个字节发送的ST7565P的函数 

//入口参数: select ,data 

//select:根据此值确定发送给ST7565P的是数据还是命令 

//data: 要发送给ST7565的一个字节 

//返回值:无 

//////////////////////////////////////////////// 

void LCD_SPISend(unsigned char select,unsigned chardata) 

     PORTC&= ~(1<<2);        // CS=0芯片使能信号 

    if(select == COMMAND)   //传输的是命令 

      {     

         PORTC &=~(1<<0);    //根据ST7565P的数据手册,传输命令时A0应该是为低电平 

         SPIByte(data);  

         PORTC |=1<<0;          // A0=1   

     } 

    else 

    { 

        SPIByte(data); 

     } 

     PORTC|= 1<<2;     //CS=恢复不使能 

//////////////////////////////////////////// 

//写坐标函数 

//入口参数:x y 

//y: 页面地址,此液晶将显示区域分为9个页面,y的值域0~8 

//x:  列地址,值域:0~127 

//返回值:无 

//////////////////////////////////////////// 

void LCD_XYSet(unsigned char x,unsigned chary) 

    LCD_SPISend(COMMAND,0xB0|y);         //y的值为0~8 

    LCD_SPISend(COMMAND,0x10|(x>>4)); 

    LCD_SPISend(COMMAND,0x00|(x&0x0F)); 

///////////////////////////////////// 

//延时函数 

//入口: ms 当延时100毫秒时,ms的值为100即可 

//返回值:无 

///////////////////////////////////// 

void DelayMs(volatile unsigned int ms) 

    volatile unsigned inti; 

    volatile unsigned intj; 

   for(i=0;i    { 

        j=280; 

       while(j--); 

     } 

////////////////////////////////////////////////////// 

//初始化SPI及液晶屏的函数 

//入口:无 

//返回值:无 

///////////////////////////////////////////////////// 

void LCD_Init(void) 

{   

     SPCR =0x5C;  

     SPSR|= 1<//SPI的功能设置解释:使能SPI;采用主机模式;SPI的传输模式为模式3;时钟频率为系统时钟的两分频,即   //3.6864/2M 

    DelayMs(100); 

    SPIByte(0xFF);       //可发可不发,无意义 

     PORTC&= ~(1<<1);            //将复位脚拉低 

    DelayMs(5);                //延时5ms,等待电源稳定 

     PORTC|= 1<<1;              //将复位脚拉高 

    DelayMs(5); 

    LCD_SPISend(COMMAND,0xAE);       //将液晶屏的显示关掉 

    LCD_SPISend(COMMAND,0xA3);       //设置偏压比 

    LCD_SPISend(COMMAND,0xA0);        //设置SEG输出方向 

    LCD_SPISend(COMMAND,0xC8);       //设置公共端输出扫描方向 

    LCD_SPISend(COMMAND,0x25);        //调整 (1 +Rb/Ra) ratio 值,调整此值影响很大 

    LCD_SPISend(COMMAND,0x81);       //开始设置α的命令 

    LCD_SPISend(COMMAND,0x28);       //设置α的值,值越大对比度越强,调整此值影响不太,是微调的

    DelayMs(5); 

    LCD_SPISend(COMMAND,0x2F);       //开启相关电压 

    DelayMs(50);             

    LCD_SPISend(COMMAND,0xAF);       //显示开 

    LCD_SPISend(COMMAND,0xF8);        

    LCD_SPISend(COMMAND,0x01);       //此两条命令是设置升压比的 

    DelayMs(500);                 //不知此延时可否省去,不过了安全起见,初次调试保留为好。。

推荐阅读

史海拾趣

First Silicon Co., Ltd公司的发展小趣事

在电子行业的初期,First Silicon Co., Ltd公司凭借其在半导体材料领域的深厚积累,成功研发出一种新型硅基材料,该材料在导电性和稳定性上远超当时市场上的同类产品。这一技术创新不仅为公司赢得了行业内的广泛关注,还吸引了众多知名电子制造商的合作意向。通过不断优化生产工艺和降低成本,First Silicon迅速将这一新材料商业化,成功打入高端电子市场,为公司的快速发展奠定了坚实基础。

HSMC公司的发展小趣事

武汉弘芯半导体制造有限公司(HSMC)于2017年11月在武汉市东西湖区临空港经济技术开发区正式成立。公司自成立之初便立下了宏伟的愿景——成为全球领先的CIDM(委托代工与芯片设计整合制造)晶圆厂之一。HSMC汇聚了来自全球半导体晶圆研发与制造领域的顶尖专家团队,致力于集成电路产业先进晶圆与封装制造技术的自主化,为我国电子科技业与芯片设计业贡献力量。

CUI公司的发展小趣事

随着电子行业的发展,CUI技术逐渐融入到整个电子产业链的各个环节中。一些企业通过整合上下游资源,形成了从CUI材料研发、生产到电子产品制造的完整产业链。这种产业链整合不仅提高了企业的运营效率,还降低了生产成本,为企业赢得了更多的市场份额。

CMD公司的发展小趣事

CMD技术公司成立于1986年,当时的市场正处于计算机技术的飞速发展时期。公司初期主要聚焦于为DEC计算机系统开发SCSI主机适配器,这一决策在当时看来是富有远见的。随着个人电脑的普及,CMD的产品迅速获得了市场的认可,为后续的发展奠定了坚实的基础。

Delta Electronics公司的发展小趣事

Delta Electronics在电源管理技术方面一直处于行业领先地位。公司不断投入研发资源,推动电源技术的创新和进步。其中,Delta开发的高效率开关式电源供应器,以其高效、稳定和可靠的性能,赢得了全球客户的广泛认可。此外,公司还积极推广绿色能源和节能技术,为客户提供环保、节能的电源解决方案。

ERNI Electronics公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ERNI Electronics开始积极拓展全球市场。1980年,公司在美国建立了分公司,为后续成为全球供应商打下了坚实的基础。此后,ERNI在新加坡建立了亚洲区总部,并在中国、台湾、韩国、泰国、马来西亚和印度等地设立了销售办事处。这一系列举措使得ERNI的产品能够覆盖更广泛的市场,满足了全球客户的需求。

问答坊 | AI 解惑

请教个关于电流源的问题

我是菜鸟  看书遇到问题向大家请教 在看到运放初期的晶体管电流源时产生了疑问 基本BJT镜像电流源里   书上把2个BJT的BE结上的电压都认为是0.7  故把这2个PN结都看成是恒压源模型 但在后面的WILDLAR电流源里  ...…

查看全部问答>

CCBN2010第一天:试用TD-CMMB手机

今年年初,国务院总理召开了国务院常务会议,决定加快推进电信网、广播电视网和互联网的三网融合,在具备条件的情况下,广电可以经营增值电信业务和部分基础电信业务、互联网业务,符合条件的电信企业可以从事部分广播电视生产和传输,这样的问题已 ...…

查看全部问答>

全面剖析LED的结构及发光原理?含图片请看?

replyreload += \',\' + 377622;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

自动布线和交互式布线有什么区别

在protel 99se 里面,自动布线和交互式布线有什么区别?交互式布线是什么意思? 我是刚学着画pcb,(以前是看懂别人画的即可),有很多不懂,要请教大家,谢谢!…

查看全部问答>

电源管理驱动/电源按键驱动/电池驱动有啥区别?

主要考虑在功能分配上,头有点糊涂了,希望大家讨论一下…

查看全部问答>

求往届电子竞赛论文 或获奖方案

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 这里有往届电子竞赛的论文吗?急求!!!!!!!!!  …

查看全部问答>

二极管单向导通

在这个电路中二极管D2的阴极比二极管D1的阴极电位低,所以D2先导通这时候D1的阳极的电位即为D2的导通电压0.7伏特,D1不导通。   分析的是否正确 [ 本帖最后由 eeboyok 于 2011-11-12 14:27 编辑 ]…

查看全部问答>

下面的代码我觉得没有错啊,可是就是没有方波产生?

include  <msp430g2231.h>unsigned int flag = 0;void main(){    WDTCTL = WDTPW +WDTHOLD;   //STOP WDT   // FLL_CTL0 |= XCAP14PF;   //匹配14PF的负载电容    P1SEL &= ~BIT5;   &nb ...…

查看全部问答>

430I2C问题

下面是程序,将读到的值通过串口发出去。 现在的问题是发出去的和读过来的不符合。 #include unsigned char a; int b,i; int main(void) {   WDTCTL = WDTPW + WDTHOLD;            & ...…

查看全部问答>

TI的模拟信号链路产品指南,TI官网也有

本帖最后由 dontium 于 2015-1-23 11:32 编辑 TI的模拟信号链路产品指南,TI官网也有 …

查看全部问答>