#include
#include
#define EN 0
#define RS 1
#define CS1 2
#define CS2 3
unsigned char yang[32]={
0xEF,0xFB,0xEF,0xFC,0x2F,0xFF,0x00,0x00,0x6F,0xFF,0xEF,0xDC,0xFF,0xEF,0xBD,0x73,
0x1D,0xBC,0xAD,0xDF,0xB5,0xE7,0x39,0xB8,0xBD,0x7F,0xBF,0xBF,0x3F,0xC0,0xFF,0xFF
};
unsigned char ying[32]={
0xFF,0xBF,0xFF,0xCF,0x03,0xF0,0xFB,0xBF,0xBB,0xBF,0x7B,0xBE,0xFB,0xB1,0xDA,0xBF,
0x39,0xBF,0xFB,0x9C,0xFB,0xAF,0xFB,0xB3,0xFB,0xBC,0x1B,0xBF,0xFB,0xBF,0xFF,0xFF/*"应",0*/
};
unsigned char peng[32]={
0xFF,0x7F,0xFF,0x9F,0x01,0xE0,0xDD,0xFD,0xDD,0xBD,0xDD,0x7D,0x01,0x80,0xFF,0x7F,
0xFF,0x9F,0x01,0xE0,0xDD,0xFD,0xDD,0xBD,0xDD,0x7D,0x01,0x80,0xFF,0xFF,0xFF,0xFF/*"朋",0*/
};
unsigned char sbily1988[80]={0xFF,0xFF,0xFF,0xCC,0x7F,0xDB,0x7F,0xDB,0x7F,0xDB,0x7F,0xDB,0x7F,0xE6,0xFF,0xFF,/*"s",0*/
0xF7,0xFF,0x07,0xC0,0xFF,0xEE,0x7F,0xDF,0x7F,0xDF,0xFF,0xEE,0xFF,0xF1,0xFF,0xFF,/*"b",1*/
0xFF,0xFF,0x7F,0xDF,0x67,0xDF,0x67,0xC0,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,/*"i",2*/
0xFF,0xFF,0xF7,0xDF,0xF7,0xDF,0x07,0xC0,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,/*"l",3*/
0x7F,0x7F,0x7F,0x7E,0x7F,0x71,0xFF,0x8F,0xFF,0xE7,0x7F,0xF9,0x7F,0xFE,0x7F,0xFF,/*"y",4*/
};
void init();
void wcom(unsigned char);
void wdata(unsigned char);
void show(unsigned char data[],unsigned char,unsigned char,unsigned char);
void main()
{
init();
while(1)
{
show(yang,32,0xb9,0xb8);
show(ying,32,0xbb,0xba);
show(peng,32,0xbd,0xbc);
show(sbily1988,80,0xbf,0xbe);
while(1);
}
}
void init() //初始化函数
{
DDRC=0xff; DDRD=0xff;
PORTC=0xff; PORTD=0xff;
wcom(0x3f); //开启液晶显示
PORTD|=BIT(CS1); //关右半平面显示
PORTD&=~BIT(CS2); //开左半平面显示
}
void wcom(unsigned char data) //写命令
{
PORTD|=BIT(EN);
PORTD&=~BIT(RS);
PORTC=data;
PORTD&=~BIT(EN);
PORTD|=BIT(RS);
}
void wdata(unsigned char data) //写数据
{
PORTD|=BIT(EN);
PORTD|=BIT(RS);
PORTC=data;
PORTD&=~BIT(EN);
PORTD&=~BIT(RS);
}
void show(unsigned char data[],unsigned char sum,unsigned char a,unsigned char b)//显示函数
{ /*data[],字模首地址;sum,数组长度;a,下页面;b 上页面*/
unsigned char i;
for(i=0;i
后记:我用的iccavr7.22版本,本来想把字模做成表格放在flash里面按照网上的方法我尝试了
{
if(i%2) {wcom(a); wcom(0x40+(i/2));}
else {wcom(b);wcom(0x40+(i-1)/2+1);}
wdata(data[i]);
}
}
后记:我用的iccavr7.22版本,本来想把字模做成表格放在flash里面按照网上的方法我尝试了
1)“const unsigned char a[]={};
2)#pragma data:code
const unsigned char a[]={};
#pragma data:data
”都失败了,第一种情况编译可以通过,但是编译后我发现它依然把数组定义在RAM里面
第二种情况编译不能通过 总是提示“cannot initialize RAM area”,
后来又上网查了好久又尝试了 flash unsigned char a[]={};
这次编译通过并且很容易看出来确实是存在flash里面了
Area Addr Size Decimal Bytes (Attributes)
-------------------------------- ---- ---- ------- ----- ------------
lit 0054 00B0 = 176. bytes (rel,con,rom)
Addr Global Symbol
----- --------------------------------
0054 __lit_start
0054 _yang
0074 _ying
0094 _peng
00B4 _sbily1988
0104 __lit_end
其中lit表示存在flash里面;但是有一点需要注意,如果用flash unsigned char定义的话,函数形参的数据类型一定也要是flash unsigned char的,否者会出现错误;
上一篇:AVR IAP功能
下一篇:基于Proteus仿真的AVR单片机串口程序
推荐阅读最新更新时间:2024-03-16 15:16
基于AVR 单片机的中频电源测试系统设计
1 引言 电参数的测量和监控是电力系统的重要组成部分,本文从测试系统的工程学实际出发,完成了对中频电源系统的电压、电流、频率、功率因数、有功功率等参数的测量和实时监控,较好的实现了中频电源测试系统的功能和工程要求。AVR 单片机相对传统的 51 系列单片机,具有更高的集成度和更强的功能,与 C 语言有很好的兼容性,RISC 指令架构使其运行速度可达 1MIPS/MHZ。随着其越来越广泛的应用,必将取代 51 系列成为单片机的主流。其主要功能包括看门狗、FLASH 程序存储器、E2PROM、A/D 转换器、定时器、计数器、USART 接口等多种功能,这使得本测试系统的硬件实现变得简单,可靠。 2 硬件结构设计与实现 本文所提及的中
[单片机]
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。 1、AVR单片机采用RISC架构,8051单片机采用CISC架构。 前者速度为后者的2~4倍,为流水线操作指令。 2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。 3、 哈佛结构,131条机器指令。 4、 延迟开机功能。 5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。 6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。
[单片机]
基于AVR单片机设计的电子时钟
1 引言 数7钟能长期、连续、可靠、稳定地工作;同时还具有体积小,功耗低等特点,便于携带,使用方便。数字钟是采用数字电路实现对“时、分、秒”数字显示的计时装置,广泛应用于个人家庭、车站、码头、办公室等公共场所,已成为人们日常生活中不可缺少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。传统MCS51系列 单片机 的所有数据处理都基于一个累加器,因此累加器与程序存储器、数据存储器之间的数据转换就成了单片机的瓶颈;在AVR单片机中,寄存器由32个通用工作寄存器组成,并且任何一个寄存器都能充当累加器,
[单片机]
MSP430程序库<三>12864液晶程序库
液晶是单片机系统最常用的显示设备之一,这个程序库是在MSP430F169、MSP1430F149单片机上测试通过的,可以放心使用;液晶选用的是金鹏的:OCMJ4X8C型号的12864液晶;控制液晶用的是并行方式,三个控制口是P3.0、P3.1、P3.2三个IO口,数据用的是P5数据IO口。 硬件介绍: 430的数字IO口: MSP430F149、MSP430F169均有P1-P6 每个8位 共48个IO口;有大量的IO口可供使用,所以对液晶控制可以选用8位平行数据方式;430的每个IO口都是双向IO口,通过寄存器控制其数据传输方向,很方便实用;有关msp430单片机的IO口介绍可以参考德州仪器提供的用户指南和数据手册等资料
[单片机]
基于MDK编译器 STM32与12864液晶显示程序 和电路连接
里附上的是主程序部分和电路连接 这里用的12864液晶是5v的,电路链接部分 RS PE2 RW PE4 EN PE6 15口PSB串并 PE3 #include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure; #define RS_SET GPIO_SetBits(GPIOE, GPIO_Pin_2) #define RS_CLR GPIO_ResetBits(GPIOE, GPIO_Pin_2) #define RW_SET GPIO_SetBits(GPIOE, GPIO_Pin_4) #define RW_CLR GPIO_Re
[单片机]
基于AVR单片机的便携式无线医疗点滴监控系统设计
引言 智能化和便携式是现代电子产品的发展趋势,医疗电子的智能化使得医务人员的操作变得更方便。医务人员可随身携带手持式监控仪对各病房点滴实时监控,及时了解相关情况;如遇突发情况如点滴低于设定警戒值,终端监控装置可产生中断信号,主控制端则可优先进行相应的处理。本设计实现了一种以AT32UC3A0512 单片机为主控制器的便携式远程无线点滴监控系统,可及时了解点滴状态,提高医疗点滴设备安全性。 1 系统原理介绍 本系统主要包括两个部分:手持式控制端和终端监控装置。手持式控制端主要实现信息输入和查询界面的操作,通过输入待查询的病房号及点滴速度值,以数据包形式发送给相应的病房监控终端,实时显示终端传送来的点滴状态数据信息。终端
[医疗电子]
AVR单片机的相关总结
1、AVR文档里要求最好不要中断嵌套,只能执行完这个中断再执行下一个中断; 2、ADC采样的时候,外部存在上拉51K的情况下,断路,测量的电压值是5V(工作电压是5V),说明mega88的输入阻抗是相当大的 哈哈; 3、SREG状态寄存器中, SEI、CLI就是开全局中断、关全局中断 (还以为没有来着),_NOP 、 _WDR; 4、Volatile (不稳定的) AVR全局变量的时候用 (可以避免编辑器对其的优化); 5、不用的IO口如果悬空的话,1是耗电量大处于判断状态;2是 受外界一点点干扰就可能成为反复振荡的输入信号(干扰问题); 6、推挽结构,输出不能直接接地 (大电流烧掉管子); 7、明确 PC (Program
[单片机]
AVR单片机的RC5和RC6算法比较与改进
摘要:RC5及RC6是两种新型的分组密码。AVR高速嵌入式单片机功能强大,在无线数据传输应用方面很有优势。本文基于Atmega128高速嵌入式单片机,实现RC5和RC6加密及解密算法,并对算法进行汇编语言的优化及改进。根据实验结果。对两种算法的优热点进行比较和分析。
关键词:Atmega128 RC5 RC6 分组密码 混合密钥 Flash
引言
在无线局域网中,传输的介质主要是无线电波和红外线,任何具有接收能力的窍听者都有可能拦截无线信道中的数据,掌握传输的内容,造成数据泄密。因此,对于无线局域网来说,数据的加密是关键技术之一。
AVR高速嵌入式单片机是8位RISC MCU,执行大多数指令只需一个时钟周期,速度快(8M
[应用]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月13日历史上的今天
厂商技术中心