搜索
bottom↓
回复: 40

使用4个IO口驱动 3310LCD + 16按键 的例子

[复制链接]

出0入0汤圆

发表于 2006-12-25 21:12:17 | 显示全部楼层 |阅读模式
//www.avrdiy.com  CVAVR1.24.8d

#include <mega8.h>

#include <delay.h>

#include <nokia3310.h>     //nokia3310.h是我编写的



void main(void)

{  

  spi_init();              //spi初始化

  lcd_init();              //lcd初始化         

  lcd_cls();               //清屏,光标复位(1602LCD初始化就包括清屏,3310必须手段清屏)         

  lcd_gotoxy(16,1);        //光标定位到第16列,第1行(最上面是0行)

  lcd_putsf("NOKIA3310",9);//显示Flash里面的字符串,共9个

  while(1)

       {

         unsigned int x;

         unsigned char a=255;

         x=read165();      //读取74HC165按键

         lcd_gotoxy(20,4); //光标定位

         lcd_put(x);       //以十进制的方式显示变量

         lcd_putchar(' '); //以字符型的方式显示变量

         lcd_puthex(a);    //以hex的方式显示变量

       }

}



出0入0汤圆

 楼主| 发表于 2006-12-25 21:14:04 | 显示全部楼层
<nokia3310.h>头文件内容



//使用者只需把这个nokia3310.h的文件复制到工程目录即可

//使用nokia3310库函数时,请先定义3310与MCU的连接

//本例子3310LCD的RESET与单片机的RESET连接,使用硬件SPI接口

#define DC    PORTB.2      //DC=0_指令,DC=1_数据

//英文字库,5*8点阵,每一个字符占用5个字节,共94个可显示字符数据

flash unsigned char data[]={     

0x00, 0x00, 0x00, 0x00, 0x00,   // sp

0x00, 0x00, 0x2f, 0x00, 0x00,   // !

0x00, 0x07, 0x00, 0x07, 0x00,   // "

0x14, 0x7f, 0x14, 0x7f, 0x14,   // #

0x24, 0x2a, 0x7f, 0x2a, 0x12,   // $

0x62, 0x64, 0x08, 0x13, 0x23,   // %

0x36, 0x49, 0x55, 0x22, 0x50,   // &

0x00, 0x05, 0x03, 0x00, 0x00,   // '

0x00, 0x1c, 0x22, 0x41, 0x00,   // (

0x00, 0x41, 0x22, 0x1c, 0x00,   // )

0x14, 0x08, 0x3E, 0x08, 0x14,   // *

0x08, 0x08, 0x3E, 0x08, 0x08,   // +

0x00, 0x00, 0xA0, 0x60, 0x00,   // ,

0x08, 0x08, 0x08, 0x08, 0x08,   // -

0x00, 0x60, 0x60, 0x00, 0x00,   // .

0x20, 0x10, 0x08, 0x04, 0x02,   // /

0x3E, 0x51, 0x49, 0x45, 0x3E,   // 0

0x00, 0x42, 0x7F, 0x40, 0x00,   // 1

0x42, 0x61, 0x51, 0x49, 0x46,   // 2

0x21, 0x41, 0x45, 0x4B, 0x31,   // 3

0x18, 0x14, 0x12, 0x7F, 0x10,   // 4

0x27, 0x45, 0x45, 0x45, 0x39,   // 5

0x3C, 0x4A, 0x49, 0x49, 0x30,   // 6

0x01, 0x71, 0x09, 0x05, 0x03,   // 7

0x36, 0x49, 0x49, 0x49, 0x36,   // 8

0x06, 0x49, 0x49, 0x29, 0x1E,   // 9

0x00, 0x36, 0x36, 0x00, 0x00,   // :

0x00, 0x56, 0x36, 0x00, 0x00,   // ;

0x08, 0x14, 0x22, 0x41, 0x00,   // <

0x14, 0x14, 0x14, 0x14, 0x14,   // =

0x00, 0x41, 0x22, 0x14, 0x08,   // >

0x02, 0x01, 0x51, 0x09, 0x06,   // ?

0x32, 0x49, 0x59, 0x51, 0x3E,   // @

0x7C, 0x12, 0x11, 0x12, 0x7C,   // A

0x7F, 0x49, 0x49, 0x49, 0x36,   // B

0x3E, 0x41, 0x41, 0x41, 0x22,   // C

0x7F, 0x41, 0x41, 0x22, 0x1C,   // D

0x7F, 0x49, 0x49, 0x49, 0x41,   // E

0x7F, 0x09, 0x09, 0x09, 0x01,   // F

0x3E, 0x41, 0x49, 0x49, 0x7A,   // G

0x7F, 0x08, 0x08, 0x08, 0x7F,   // H

0x00, 0x41, 0x7F, 0x41, 0x00,   // I

0x20, 0x40, 0x41, 0x3F, 0x01,   // J

0x7F, 0x08, 0x14, 0x22, 0x41,   // K

0x7F, 0x40, 0x40, 0x40, 0x40,   // L

0x7F, 0x02, 0x0C, 0x02, 0x7F,   // M

0x7F, 0x04, 0x08, 0x10, 0x7F,   // N

0x3E, 0x41, 0x41, 0x41, 0x3E,   // O

0x7F, 0x09, 0x09, 0x09, 0x06,   // P

0x3E, 0x41, 0x51, 0x21, 0x5E,   // Q

0x7F, 0x09, 0x19, 0x29, 0x46,   // R

0x46, 0x49, 0x49, 0x49, 0x31,   // S

0x01, 0x01, 0x7F, 0x01, 0x01,   // T

0x3F, 0x40, 0x40, 0x40, 0x3F,   // U

0x1F, 0x20, 0x40, 0x20, 0x1F,   // V

0x3F, 0x40, 0x38, 0x40, 0x3F,   // W

0x63, 0x14, 0x08, 0x14, 0x63,   // X

0x07, 0x08, 0x70, 0x08, 0x07,   // Y

0x61, 0x51, 0x49, 0x45, 0x43,   // Z

0x00, 0x7F, 0x41, 0x41, 0x00,   // [

0x55, 0x2A, 0x55, 0x2A, 0x55,   // 55

0x00, 0x41, 0x41, 0x7F, 0x00,   // ]

0x04, 0x02, 0x01, 0x02, 0x04,   // ^

0x40, 0x40, 0x40, 0x40, 0x40,   // _

0x00, 0x01, 0x02, 0x04, 0x00,   // '

0x20, 0x54, 0x54, 0x54, 0x78,   // a

0x7F, 0x48, 0x44, 0x44, 0x38,   // b

0x38, 0x44, 0x44, 0x44, 0x20,   // c

0x38, 0x44, 0x44, 0x48, 0x7F,   // d

0x38, 0x54, 0x54, 0x54, 0x18,   // e

0x08, 0x7E, 0x09, 0x01, 0x02,   // f

0x18, 0xA4, 0xA4, 0xA4, 0x7C,   // g

0x7F, 0x08, 0x04, 0x04, 0x78,   // h

0x00, 0x44, 0x7D, 0x40, 0x00,   // i

0x40, 0x80, 0x84, 0x7D, 0x00,   // j

0x7F, 0x10, 0x28, 0x44, 0x00,   // k

0x00, 0x41, 0x7F, 0x40, 0x00,   // l

0x7C, 0x04, 0x18, 0x04, 0x78,   // m

0x7C, 0x08, 0x04, 0x04, 0x78,   // n

0x38, 0x44, 0x44, 0x44, 0x38,   // o

0xFC, 0x24, 0x24, 0x24, 0x18,   // p

0x18, 0x24, 0x24, 0x18, 0xFC,   // q

0x7C, 0x08, 0x04, 0x04, 0x08,   // r

0x48, 0x54, 0x54, 0x54, 0x20,   // s

0x04, 0x3F, 0x44, 0x40, 0x20,   // t

0x3C, 0x40, 0x40, 0x20, 0x7C,   // u

0x1C, 0x20, 0x40, 0x20, 0x1C,   // v

0x3C, 0x40, 0x30, 0x40, 0x3C,   // w

0x44, 0x28, 0x10, 0x28, 0x44,   // x

0x1C, 0xA0, 0xA0, 0xA0, 0x7C,   // y

0x44, 0x64, 0x54, 0x4C, 0x44,   // z

0x00, 0x08, 0x36, 0x41, 0x00,  // {

0x00, 0x00, 0x7F, 0x00, 0x00,   // |

0x00, 0x41, 0x36, 0x08, 0x00,   // }

0x08, 0x10, 0x08, 0x04, 0x08    // ~

};



//=======================================================================================



void spi_init(void)                    //spi初始化

{  

  PORTB&=0b11000011;

  DDRB|= 0b00101100;

  SPCR=80;                            //=112或者=80,那么LCD就可以旋转180度安装

}



void lcd_write(unsigned char data)

{

  SPDR=data;                      //开始发送数据

  while((SPSR>>7)==0);                //等待发送接收结束

}



//=======================================================================================

   

unsigned int read165(void)     //读2个74HC165数据

{

  unsigned int data165;

  DC=1;

  DC=0;

  SPDR=0;                      //开始发送数据(实际是对LCD写空指令0)

  while((SPSR>>7)==0);         //等待发送接收结束

  data165=SPDR;                //读第一个165的数据

  SPDR=0;                      //开始发送数据

  while((SPSR>>7)==0);         //等待发送接收结束

  data165=data165*256+SPDR;    //读第二个165的数据,并且和第一个数据合并

  return data165;

}



//=======================================================================================

        

void lcd_init(void)           //nokia3310初始化函数

{

  DC=0;

  lcd_write(33); lcd_write(144); lcd_write(32); lcd_write(12);

}



//=======================================================================================

   

void lcd_cls(void)            //nokia3310清屏,光标复位

{

  unsigned int  i=0;

  DC=0;

  lcd_write(128);                //光标回到0列

  lcd_write(64);                 //光标回到0行

  DC=1;

  for(i=0;i<504;i++)            //写504个0数据,就是清屏

  lcd_write(0);

}   



//=======================================================================================

   

//光标定位,x(0-83)是列地址,y(0-5)是行地址   

void lcd_gotoxy(unsigned char x,unsigned char y)

{

  DC=0;

  lcd_write(x+128);

  lcd_write(y+64);

}



//=======================================================================================

   

void lcd_putchar(unsigned char ASCII)//以ASCII值的方式显示一个变量

{

  unsigned char i;

  unsigned int No;

  No=ASCII-32;      //字模数据是由空格' '开始,空格的ASCII的值就是32

  No=No*5;          //每个字符的字模是5个字节

  DC=1;

  for(i=0;i<5;i++)  //一个字符的字模是5个字节,就是5*8点阵

     {

       lcd_write(data[No]);

       No++;

     }

  lcd_write(0);     //每个字符之间空一列

}  



//=====================================================================================



void lcd_puthex(unsigned char byte_data)   //以十六进制显示一个字节变量

{

  unsigned char temp_data;

  

  temp_data=byte_data>>4;                             //求高4位

  if(temp_data<10) temp_data+=48; else temp_data+=55; //转化为ASCII值

  lcd_putchar(temp_data);                             //显示

  

  temp_data=byte_data&15;                             //求低4位

  if(temp_data<10) temp_data+=48; else temp_data+=55; //转化为ASCII值

  lcd_putchar(temp_data);                             //显示

}  



//=====================================================================================



void lcd_put(unsigned int byte_data)  //以十进制显示一个双字节变量

{

  unsigned char temp_data;

  

  temp_data=byte_data/10000%10;         //求万位数

  lcd_putchar(temp_data+48);            //转化为ASCII值再显示

  

  temp_data=byte_data/1000%10;          //求千位数

  lcd_putchar(temp_data+48);            //转化为ASCII值再显示

  

  temp_data=byte_data/100%10;           //求百位数

  lcd_putchar(temp_data+48);            //转化为ASCII值再显示

  

  temp_data=byte_data/10%10;            //求十位数

  lcd_putchar(temp_data+48);            //转化为ASCII值再显示

  

  temp_data=byte_data%10;               //求个位数

  lcd_putchar(temp_data+48);            //转化为ASCII再再显示

}  



//=====================================================================================



void lcd_putsf(flash unsigned char *string , unsigned char n) //显示FLASH里面的字符串

{        

  unsigned char i=0;

  while(i<n)

       {  

         lcd_putchar( string[ i ] );        //顺序显示字符

         i++;                        

       }

}

出0入0汤圆

 楼主| 发表于 2006-12-25 21:17:19 | 显示全部楼层
说准确一点,它不是3310LCD,而是5110/6110LCD,只是它们的控制芯片和程序都是一样而已

出0入0汤圆

发表于 2006-12-25 23:01:52 | 显示全部楼层
多少钱一块啊,哪里有卖??

出0入0汤圆

发表于 2006-12-25 23:09:45 | 显示全部楼层
同关注这个屏的消息~~~

出0入0汤圆

 楼主| 发表于 2006-12-25 23:14:41 | 显示全部楼层
这里有

http://www.avrdiy.com/shop/index.asp

出0入0汤圆

发表于 2006-12-25 23:32:25 | 显示全部楼层
怎么安装的啊?电气连接是怎么做到的?

出0入0汤圆

 楼主| 发表于 2006-12-26 08:54:06 | 显示全部楼层
NOKIA5110LCD使用的是导电橡胶,带金属框架,框架有4个反扣,做好PCB后扣上去就是了



出0入0汤圆

 楼主| 发表于 2006-12-26 09:01:04 | 显示全部楼层

出0入0汤圆

发表于 2006-12-26 09:32:59 | 显示全部楼层
呵呵,这个屏比3310的看上去好看多了,正正方方的。

强烈建议armok在邮购部增加这个品种。^_^

出0入0汤圆

发表于 2006-12-26 14:27:38 | 显示全部楼层
强烈顶,太好安装了。

请问啊艺,NOKIA5110显示屏(裸屏)  有没有带导电胶?

出0入0汤圆

发表于 2006-12-26 15:29:04 | 显示全部楼层
是不错,就是不知道时间长一点,导电橡胶链接的稳定性怎么样~~~

还有就是5110的货源稳定不~

出0入0汤圆

 楼主| 发表于 2006-12-26 17:17:24 | 显示全部楼层
NOKIA5110显示屏(裸屏) 带导电橡胶。

11楼的导电橡胶担心也是有必要的,不过,你使用常用的1602/12864LCD时也要注意了,因为它们都是使用导电橡胶的。

出0入0汤圆

发表于 2006-12-27 18:17:44 | 显示全部楼层
正好学习

出0入0汤圆

发表于 2007-1-2 21:49:13 | 显示全部楼层
请问楼主,LCD的供电电压是多少?怎么没有稳压管的?

出0入0汤圆

 楼主| 发表于 2007-1-2 22:56:06 | 显示全部楼层
3.3V-5V的电压都没有任何问题,我经过长时间测试过的

下面是5V电压显示的效果,与3.3V的效果完全一样

出0入0汤圆

发表于 2007-1-2 22:56:29 | 显示全部楼层
5110屏不错。

出0入0汤圆

发表于 2008-1-1 13:27:42 | 显示全部楼层
不错 有这个板子PCB文件吗 谢谢 duan@enest.cn

出10入95汤圆

发表于 2008-1-2 09:53:27 | 显示全部楼层
嗯,不错!谢谢楼主,请问这屏的功耗怎样?

出0入0汤圆

发表于 2009-9-5 09:22:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-18 22:31:11 | 显示全部楼层
楼主的小LCD板很漂亮,有卖不?怎么联系。

出0入0汤圆

发表于 2009-9-20 13:40:35 | 显示全部楼层
mark1

出0入0汤圆

发表于 2009-9-22 09:57:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-27 16:03:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-29 17:13:03 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-4-29 17:19:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-29 19:29:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-12 21:33:37 | 显示全部楼层
5510能手工焊接吗?
那位高手手工焊接过,指导一下啊

出0入0汤圆

发表于 2010-5-20 08:31:44 | 显示全部楼层
屏幕真不错,呵呵

出0入0汤圆

发表于 2010-5-20 09:27:55 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-6-4 22:59:59 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2010-10-8 20:39:34 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2010-10-8 21:27:59 | 显示全部楼层
厉害

出0入0汤圆

发表于 2010-10-29 19:01:58 | 显示全部楼层
真好 我也喜欢  挺漂亮的

出0入0汤圆

发表于 2011-5-26 23:50:56 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-27 12:55:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-15 17:27:50 | 显示全部楼层
好東西!學習了!

出0入0汤圆

发表于 2011-8-15 22:05:25 | 显示全部楼层
我手上还有十来块5110的

出0入0汤圆

发表于 2011-8-16 09:56:45 | 显示全部楼层
好东西啊  感谢分享

出0入0汤圆

发表于 2011-9-16 21:23:24 | 显示全部楼层

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-8 08:26

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

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