AVR单片机驱动NOKIA3310的示例程序

发布者:oplkjjj最新更新时间:2016-10-19 来源: eefocus关键字:AVR单片机  驱动NOKIA3310 手机看文章 扫描二维码
随时随地手机看文章
#include         
#include         
#include          
void main(void)        
{          
  PORTB&=209;        
  DDRB|=46;                         //设置单片机的4个LCD引脚输出0         
  while(1)         
       {          
         lcd_init();                //lcd初始化                 
         lcd_cls();                 //清屏,光标回位        
         lcd_gotoxy(16,2);          //光标定位到第16列,第1行(最上面是0行)         
         lcd_putsf("NOKIA3310",9);  //显示Flash里面的字符串,共9个         
         lcd_gotoxy(38,4);        
         lcd_putchar(’O’);          //显示英文字母大写O        
         lcd_putchar(75);           //数字75的的ASCII字符是英文字母大写K   
         delay_ms(1000);        
       }        
}   

//下面是  文件内容         

/*************************************************************         
使用者只需把这个nokia3310.h的文件复制到工程目录即可         
使用nokia3310库函数时,请先定义3310与MCU的连接         
本例子3310LCD与单片机的连接如下         
RESET   PB1         
D/C     PB2         
SDIN    PB3         
SCLK    PB5         
SCE     GND                                            
英文字库,5*8点阵,每一个字符占用5个字节,共94个可显示字符数据**/            
                                      
#define RESET PORTB.1           //RESET=0时,LCD复位         
#define DC    PORTB.2           //DC=0_指令,DC=1_数据           
#define SDIN  PORTB.3         
#define SCLK  PORTB.5              
//#define www.avrdiy.com Panxiaoyi   
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 lcd_write(unsigned char byte)        //写LCD函数,模拟SPI通信     
{       
  unsigned char i;                        //先写数据的高位,后写低位     
  for(i=128;i>0;i>>=1)       
     {        
       if( byte & i ) SDIN=1; else SDIN=0;       
       SCLK=0; SCLK=1;        
     }       
}        
/*上面的是模拟SPI发送数据函数,下面的是硬件SPI发送数据函数         
void lcd_write(unsigned char data)         
{          
  SPCR=80;         
  SPDR=data;                              //开始发送数据         
  while((SPSR>>7)==0);                    //等待发送接收结束         
}        */         
//=======================================================================================         
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);         
}          
//=======================================================================================         
                 
void lcd_init(void)                       //nokia3310初始化函数         
{          
  RESET=0;             
  RESET=1;                                //复位结束         
  DC=0;                                   //准备写指令         
  lcd_write(32+1);                        //进入扩展指令       
  lcd_write(128+38);                      //设置Vop,相当于亮度          
  lcd_write(4+3);                         //设置温度系数,相当于对比度           
  lcd_write(16+3);                        //设置偏置,这句要与不要的实际效果好像一样       
  lcd_write(32+0);                        //进入基本指令       
  lcd_write(12);                          //使能芯片活动/垂直寻址       
}          
//=======================================================================================         
//光标定位,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 character) //显示ASCII值的字符         
{         
  unsigned char i=0;         
  unsigned int No;         
  No=character-32;                        //字模数据是由空格开始,空格字符的ASCII的值就是32         
  No=No*5;                                //每个字符的字模是5个字节         
  DC=1;          
  while(i<5)                              //一个字符的字模是5个字节,就是5*8点阵         
     {         
       lcd_write(data[No]);           
       i++;         
       No++;         
     }         
  lcd_write(0);                           //每个字符之间空一列         
}           
//=====================================================================================         
void lcd_putsf(flash unsigned char *string , unsigned char n) //显示FLASH里面的字符串         
{                 
  unsigned char i=0;         
  while(i        {           
         lcd_putchar( string[i] );        //顺序显示字符         
         i++;                                  
       }         
关键字:AVR单片机  驱动NOKIA3310 引用地址:AVR单片机驱动NOKIA3310的示例程序

上一篇:AVR单片机控制DS18B20的示例C程序
下一篇:AVR单片机外部中断INT0示例

推荐阅读最新更新时间:2024-03-16 15:16

avr单片机汇编参考程序
该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。 该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。 图 简易24小时时钟硬件原理图 系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATmega128的PA口输出显示数字的7段码(注意:图中省缺了PA口连接到LED各段的8个限流电阻,阻值800欧左右),PC口用于控制8个LED的位选。ATmega128使用外部16MHz晶振(图中未画出)。 系统还使用AT
[单片机]
<font color='red'>avr单片机</font>汇编参考程序
avr单片机带小数点数码管的程式
//------------2_8数码管键调时带小数点功能 #include iom128v.h #define uchar unsigned char #define uint unsigned int #define P0_1 PORTA |= (1 0) #define P0_0 PORTA &=~ (1 0) #define P1_1 PORTA |= (1 1) #define P1_0 PORTA &=~ (1 1) #define P2_1 PORTA |= (1 2) #define P2_0 PORTA &=~ (1 2) #define P3_1 PORTA |= (1 3) #define P3_0 PO
[单片机]
<font color='red'>avr单片机</font>带小数点数码管的程式
基于AVR单片机的高压防护系统的研究
目前,我国铁路上运行的电力机车所使用的电源,是接触网提供的25kV单相交流电。在电气化铁路区段运行和整备作业的机车,经常需要作业人员通过人孔盖登上车顶,对机车进行检查维修工作。通常在上车顶工作前,作业人员应当按照登顶作业程序,在地面对作业网断电,再打开车顶人孔盖登顶作业。 然而,因为作业人员疏忽大意,未认真执行接触网断电的操作程序,在接触网上仍带电的情况下,就盲目登车顶工作,多次造成被电击伤亡的事故。针对这一情况,我们研制了机车车顶人孔盖安全报警联运接地装置,可以为登顶作业的工作人员提供可靠、有效的人身安全保护,确保登顶作业人员的人身安全。 本文将介绍一套可靠检测接触网有无高电压的告警装置和一套受告警装置控制的联运接地装置。
[单片机]
nRF24L01p+AVR单片机ATmage88射频收发程序
单片机源程序如下: #define _nRF24L01_C_ #include nRF24L01.h INT8U CE_Status = 0; /* ================================================================================ Function : L01_GetCEStatus( ) Description : Get the status of the CE PIN Input : NONE Output: 1:CE=1, 0:CE=0 ===================================================
[单片机]
AVR单片机视觉智能寻迹车设计与实现
0 引 言 智能运输系统是未来交通运输系统发展的趋势,智能汽车在智能运输系统中扮演着十分重要的角色。作者提出智能寻迹车作为构建未来智能交通运输系统中重要部分,针对未来交通运输系统有导航线的环境命题假设下智能汽车的自主寻迹问题,提出一种基于视觉的智能寻迹车模设计方案,作为该假设问题的解决方案。 基于视觉的智能寻迹车模设计方案能够在线型复杂,转弯半径不确定性大的情况下,利用视觉自主寻迹前进,分级精确转向。 1 系统总体设计 基于视觉的智能寻迹车模系统以AVR单片机MEGAl6为核心,由单片机模块、路径识别模块、直流电机驱动模块、舵机驱动模块等组成,如图1所示。 直流电动机为车辆的驱动装置,转向电动机用于控
[单片机]
AVR单片机在LED遥控照明中的应用
引言 LED照明已经进入了家庭用户,与传统的照明设备(如白炽灯、荧光灯)相比,具有光源单色纯度高、色彩多样、效率高、光强度可调等优点。针对传统照明亮度不易调节、开关位置固定的问题,本文基于AVR单片机设计了一种LED遥控照明系统,提出了LED照明灯的驱动与亮度调节的方法。 1 LED照明灯控制系统原理 系统原理图如图1所示。当红外接收器接收到红外遥控信号时,通过外部中断将AVR单片机从休眠模式中唤醒;AVR单片机开始解析红外信号,如果与系统地址匹配,则将根据解析到的命令改变LED恒流源驱动的输入,从而改变LED灯的状态。     2 系统硬件设计 2.1 控制器 控制器采用AVR单片机ATmega8。ATmega8是Atmel公
[电源管理]
<font color='red'>AVR单片机</font>在LED遥控照明中的应用
基于AVR单片机在采暖炉控制系统中的应用
1. 引言 单片机在工业控制领域应用时不同于民用、商用领域中的应用,工业控制所处的环境相对比较恶劣,干扰源多,其常见干扰源来自现场工业电气在投入、运行、切断等工况下产生的静电感应、尖峰电压、浪涌电流等干扰。实践表明,在工作室中按用户要求设计的小型工业采暖控制系统,尽管各项逻辑功能及技术指标的测试都正常,但该系统拿到现场上却不能使用,检测失灵,操作失控,显示花屏等现象接踵而来。经分析,其干扰是从现场不同路径传入单片机控制系统的。切断干扰源,提高单片机抗干扰能力是解决控制系统正常工作的前提。 2 抗干扰措施 2.1 测温信号的抗干扰 测温电路采用的是单总线芯片DS18B20,该芯片具有测温精度高,连接线路简单等
[单片机]
基于<font color='red'>AVR单片机</font>在采暖炉控制系统中的应用
AVR单片机中断实现 ATmega16 INT ISR(INT0_vect)
2.21实例功能 前面例子中分别介绍了按键控制发光二极管的亮灭,但是我们注意到,在程序中需要一直检测按键的状态,这样明显的浪费了单片机的资源,降低了单片机的工作效率,。那么有没有一种方法可以让单片机不用一直检测按键的状态,而只在有按键动作时才去响应呢? 当然有!单片机中除了具有基本输入输出功能的作用外,还有专门检测外界信号并作出响应的中断系统。在本例中,通过利用外部中断实现单片机对按键事件的响应和处理。 本例中三个功能模块描述如下: ● 单片机系统:对按键事件产生的中断时间作出响应,并在数码管上显示按键按下的次数。 ● 外围电路:通过将按键连接到单片机的外部中断检测端口,实现中断产生电路,数码管显示电路用于指示
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved