AVR实现LCD12864显示汉字程序
本程序所使用的单片机芯片是ATmega16,液晶是LCD12864,程序可以在开发板上很完美的运行,只显示汉字(只显示汉字,字符、字符串、图片未写程序)
/*******************************************************************************
********************************************************************************
作者:松清竹龄
时间:2010.10
运行软件:ICCAVR7.14
使用芯片:ATmega16
实现功能:LCD12864显示汉字
汉字取模软件:PCtoLCD2002
********************************************************************************
*******************************************************************************/
#include <iom16v.h>
#define RS_CLRPORTD &= ~(1 << PD3)/*命令或数据选择*/
#define RS_SETPORTD |= (1 << PD3)/*RS = 1命令,RS = 0数据*/
#define RW_CLRPORTD &= ~(1 << PD4)/*读取或写入选择*/
#define RW_SETPORTD |= (1 << PD4)/*RW = 1读,RW = 0写*/
#define EN_CLRPORTD &= ~(1 << PD6)/*读写使能信号*/
#define EN_SETPORTD |= (1 << PD6)/*下降沿有效*/
#define RST_CLRPORTD &= ~(1 << PD7)/*芯片复位脚*/
#define RST_SETPORTD |= (1 << PD7)/*高电平复位*/
#define CSA_CLRPORTC &= ~(1 << PC6)/*左半屏片选*/
#define CSA_SETPORTC |= (1 << PC6)/*高电平选中*/
#define CSB_CLRPORTC &= ~(1 << PC7)/*右半屏片选*/
#define CSB_SETPORTC |= (1 << PC7)/*高电平选中*/
extern const unsigned char CHINESE_FONT[];
extern const unsigned char ENGLISH_FONT[];
void disp_init(void);
void disp_clear(unsigned char x0, unsigned char x1, unsigned char y);
void disp_word(unsigned char x, unsigned char y, unsigned char word);
void delay_ms(unsigned char i);
void delay_us(unsigned int n);
/*延时函数*/
void delay_us(unsigned int n) {
if (n == 0) {
return ;
}
while (--n);
}
/*延时函数*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 1; a < i; a++) {
for (b = 1; b; b++) {
;
}
}
}
void main(void) {
PORTA = 0xFF;/*打开上拉*/
DDRA = 0x00;/*方向输入*/
PORTB = 0xFF;/*电平设置*/
DDRB = 0xFF;/*方向输出*/
PORTC = 0x7F;
DDRC = 0x80;
PORTD = 0xFF;
DDRD = 0x00;
disp_init();
disp_clear(0, 128, 0);
disp_clear(0, 128, 2);
disp_clear(0, 128, 4);
disp_clear(0, 128, 6);
/**********汉字显示控制部分************/
disp_word(1, 1,1);
disp_word(20,2,2);
disp_word(40,4,3);
disp_word(60,4,4);
disp_word(80,2,5);
disp_word(100,1,6);
/***************************************/
while (1);
}
/*显示屏命令写入函数前半屏*/
void LCD0_write_com(unsigned char com) {
RS_CLR;
RW_CLR;
CSA_SET;
CSB_CLR;
EN_SET;
PORTB = com;
delay_us(1);
EN_CLR;
}
/*显示屏命令写入函数后半屏*/
void LCD1_write_com(unsigned char com) {
RS_CLR;
RW_CLR;
CSA_CLR;
CSB_SET;
EN_SET;
PORTB = com;
delay_us(1);
EN_CLR;
}
/*显示屏命令写入函数*/
void LCD0_write_data(unsigned char data
) {
RS_SET;
RW_CLR;
CSA_SET;
CSB_CLR;
EN_SET;
PORTB = data;
delay_us(1);
EN_CLR;
}
/*显示屏命令写入函数*/
void LCD1_write_data(unsigned ch
本程序所使用的单片机芯片是ATmega16,液晶是LCD12864,程序可以在开发板上很完美的运行,只显示汉字(只显示汉字,字符、字符串、图片未写程序)
ar data) {
RS_SET;
RW_CLR;
CSA_CLR;
CSB_SET;
EN_SET;
PORTB = data;
delay_us(1);
EN_CLR;
}
/*显示屏清空显示*/
void disp_clear(unsigned char x0, unsigned char x1, unsigned char y) {
unsigned char x;
/*清除高位*/
x = x0;
if (x < 63) {/*地址在左半屏范围内*/
LCD0_write_com(y | 0xB8);
LCD0_write_com(x | 0x40);
}
while (x < x1) {
LCD0_write_data(0x00);
x ++;
if (x > 63) {/*判断地址是否越界*/
break;
}
}
if (x < x1) {/*地址进入左半屏范围*/
LCD1_write_com(y | 0xB8);
LCD1_write_com(x | 0x40);
}
while (x < x1) {
LCD1_write_data(0x00);
x ++;
}
/*清除低位*/
x = x0;
if (x < 63) {/*地址在左半屏范围内*/
LCD0_write_com((y+1) | 0xB8);
LCD0_write_com(x | 0x40);
}
while (x < x1) {
LCD0_write_data(0x00);
x ++;
if (x > 63) {/*判断地址是否越界*/
break;
}
}
if (x < x1) {/*地址进入左半屏范围*/
LCD1_write_com((y+1) | 0xB8);
LCD1_write_com(x | 0x40);
}
while (x < x1) {
LCD1_write_data(0x00);
x ++;
}
}
/*在指定位置显示一个汉字*/
void disp_word(unsigned char x, unsigned char y, unsigned char word) {
unsigned char i = 0x00;
const unsigned char *q;/*取字库指针*/
q = &CHINESE_FONT[word * 32];/*定位指针地址*/
/*显示高16位*/
i = 0x00;
if (x < 64) {/*地址在左半屏范围内*/
LCD0_write_com(y | 0xB8);
LCD0_write_com(x | 0x40);
while (i < 16) {
LCD0_write_data(*q);
q ++;
x ++;
i ++;
if (x > 63) {/*判断地址是否越界*/
break;
}
}
}
if (i < 16) {/*地址进入左半屏范围*/
LCD1_write_com(y | 0xB8);
LCD1_write_com(x | 0x40);
while (i < 16) {
LCD1_write_data(*q);
q ++;
x ++;
i ++;
}
}
/*显示低16位*/
i = 0x00;
x -= 16;
if (x < 64) {/*地址在左半屏范围内*/
LCD0_write_com((y+1) | 0xB8);
LCD0_write_com(x | 0x40);
while (i < 16) {
LCD0_write_data(*q);
q ++;
x ++;
i ++;
if (x > 63) {/*判断地址是否越界*/
break;
}
}
}
if (i < 16) {/*地址进
…… 此处隐藏:4080字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




