基于Proteus学习单片机系列(十一)——LCD12864
获取更多资源,请关注微信公众号:嵌入式基地
获取项目资源:公众号后台回复:单片机仿真
基于Proteus学习单片机系列(一)——点亮LED
基于Proteus学习单片机系列(二)——驱动数码管
基于Proteus学习单片机系列(三)——按键
基于Proteus学习单片机系列(四)——中断
基于Proteus学习单片机系列(五)——定时器实现电子表
基于Proteus学习单片机系列(六)——I2C总线AT24C04
基于Proteus学习单片机系列(七)——实时时钟DS1302
基于Proteus学习单片机系列(八)——AD转换及其应用--TLC549
基于Proteus学习单片机系列(九)——DA转换及其应用--TLC5615
基于Proteus学习单片机系列(十)——LCD1602
基于Proteus学习单片机系列(十一)——LCD12864
项目下载
点击下载
1.0 电路图
2.0 程序
还是只贴出驱动,完整例程可在上面下载。
#include <intrins.h>
#include<ziku.c>#define uchar unsigned char
#define uint unsigned int
uchar num[] = "0123456789";
sbit REST = P2^0; //Reset signal, active"L"
sbit C_D = P2^1; //L:data H:code
sbit C_E = P2^2; //Chip enable signal, active"L"
sbit R_D = P2^3; //read signal, active"L"
sbit W_R = P2^4; //write signal, active"L"
#define width 15 //显示区宽度
#define Graphic 1
#define TXT 0
#define LcmLengthDots 128
#define LcmWidthDots 64
/**************************12864液晶的相关函数**********************/
void delay_nms(uint i)
{while(i)i--;
}
void write_commond(uchar com) //对液晶写一个指令
{ C_E = 0; C_D = 1;R_D = 1;P0 = com;W_R = 0; // write _nop_(); W_R = 1; // disable writeC_E = 1; C_D = 0;
}
void write_date(uchar dat) //对液晶写一个数据
{C_E = 0;C_D = 0;R_D = 1;P0 = dat;W_R = 0;_nop_();W_R = 1;C_E = 1;C_D = 1;
}void write_dc(uchar com,uchar dat) //写一个指令和一个数据
{write_date(dat);write_commond(com);
}
//写一个指令和两个数据
void write_ddc(uchar com,uchar dat1,uchar dat2)
{write_date(dat1);write_date(dat2);write_commond(com);
}
//LCD初始化函数
void F12864_init(void)
{ REST = 0;delay_nms(2000); REST = 1;write_ddc(0x40,0x00,0x00); //设置文本显示区首地址write_ddc(0x41,128/8,0x00); //设置文本显示区宽度write_ddc(0x42,0x00,0x08); //设置图形显示区首地址0x0800write_ddc(0x43,128/8,0x00); //设置图形显示区宽度write_commond(0xA0); //设置光标形状 8x8方块write_commond(0x80); //显示方式设置 文本and图形(异或)write_commond(0x92); //设置光标write_commond(0x9F); //显示开关设置 文本开,图形开,光标闪烁关
}
//**************************//清显示存储器函数
void F12864_clear(void)
{unsigned int i;write_ddc(0x24,0x00,0x00); //置地址指针为从零开始write_commond(0xb0); //自动写for(i = 0;i < 128 * 64 ;i++)write_date(0x00); //清一屏write_commond(0xb2); //自动写结束write_ddc(0x24,0x00,0x00); //重置地址指针
}
//设定显示的地址
void goto_xy(uchar x,uchar y,uchar mode)
{uint temp;temp = 128 / 8 * y + x;if(mode) //mode = 1为Graphic{ //如果图形模式要加上图形区首地址0x0800temp = temp + 0x0100;}write_ddc(0x24,temp & 0xff,temp / 256); //地址指针位置
}
//显示一个ASCII码函数
void Putchar(uchar x,uchar y,uchar Charbyte)
{goto_xy(x,y,TXT);write_dc(0xC4,Charbyte-32); //数据一次读写方式//查字符rom
}
void display_string(uchar x,uchar y,uchar *p)
{while(*p != 0){if(x > 15 ) //自动换行 128*64{ x = 0;y++;}Putchar(x,y,*p);++x;++p;}
}
void display_num(uchar x,uchar y,uchar z)
{uchar z1,z2;z1 = num[z / 10];z2 = num[z % 10];Putchar(x,y,z1);Putchar(x+1,y,z2);
}//显示一串汉字,j = k + n为(n为要显示的字的个数),k为选择从哪个字开始
void dprintf_hanzi_string_1(struct typFNT_GB16 code *GB_16,uint X_pos,uint Y_pos,uchar j,uchar k)
{ unsigned int address;unsigned char m,n;while(k < j){m = 0;address = LcmLengthDots / 8 * Y_pos + X_pos + 0x0800;for(n = 0;n < 16;n++) //计数值16{write_ddc(0x24,(uchar)(address),(uchar)(address>>8)); //设置显示存储器地址write_dc(0xc0,GB_16[k].Mask[m++]); //写入汉字字模左部write_dc(0xc0,GB_16[k].Mask[m++]); //写入汉字字模右部address = address + 128/8; //修改显示存储器地址,显示下一列(共16列)}X_pos += 2;k++;}
}
基于Proteus学习单片机系列(十一)——LCD12864相关推荐
- 基于Proteus学习单片机系列(七)——实时时钟DS1302
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...
- 基于Proteus学习单片机系列(二)——驱动数码管
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...
- 基于Proteus学习单片机系列(六)——I2C总线AT24C04
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...
- 基于Proteus学习单片机系列(七)——AD转换及其应用--ADC0832
获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 项目下载 点击下载 1.电路图 2.程序 只在这里贴出主函数,其余的请点击上面(点击下载)进行下载,实在太麻烦. ...
- 基于 Proteus 的单片机仿真
最近又要用proteus进行仿真51单片机-- 1.元器件的放置: 里面都是些英文,找起来头大,下面的一些表都是常见的单片机仿真使用的原件,很方便的就能找到了. 2.电源和地的放置 反正我在元件库中找 ...
- 单片机怎么通过按键控制计时器的开始和停止_学习电路仿真:基于proteus电路仿真软件的交通灯控制电路设计...
电路仿真软件是当代重要软件之一,缺乏电路仿真软件,模拟运行环境将无法搭建.对于电路仿真软件,虽然市面上类别众多,但知名电路仿真软件为proteus.本文对于电路仿真软件的介绍,为基于proteus的交 ...
- hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...
- c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计
1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...
- 用Proteus学习51单片机之I2C(IIC)总线
最近刚做好一个站,基于rails 3,教程为主,大家捧场看看,谢谢!www.yo945.com 在学习单片机的过程中,我常有这样的烦恼:随随便便一个芯片,少则占用三五个IO口,一般的就占用8个,稍微想 ...
- 基于proteus的功率_学习电路仿真:基于proteus电路仿真软件的步进电机仿真
本文是电路仿真软件的进阶篇,对于电路仿真软件的基础篇,大家可翻阅往期文章哦.本文中,将基于proteus电路仿真软件的步进电机仿真,一起来了解下吧. 步进电机广泛应用在生产实践的各个领域.它最大的应用 ...
最新文章
- 设计模式C#实现(三)——外观模式
- jquery操作select取值赋值与设置选中[转]
- [Linux]Shell的运算符和特殊变量
- Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)
- mysql 引擎 校对,MySQL 字符集和校对
- nload实时查看linux服务器网络流量的工具
- Arduino的串口结束符及串口缓冲区
- 转 【MQTT】在Windows下搭建MQTT服务器
- Python项目:用所有朋友微信头像做云图图
- request 和require区别_合同翻译时如何区分使用request和require
- 第二章----基本语法
- UVA10196 Check The Check【模拟+回溯】
- Xamarin iOS教程之视图显示图像
- worddayi计算机考试题,期末试卷
- css小点,css3效果:animate实现点点点loading动画效果(二)
- 英语3500词(十一)entertainment主题(2022.1.23)
- 关于Java双大括号{{}}
- Voxceleb2 视频数据集下载(国内链接)
- C# -> (Cshape)笔记
- 工控安全-工控安全案例