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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




