获取更多资源,请关注微信公众号:嵌入式基地

获取项目资源:公众号后台回复:单片机仿真

基于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相关推荐

  1. 基于Proteus学习单片机系列(七)——实时时钟DS1302

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  2. 基于Proteus学习单片机系列(二)——驱动数码管

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  3. 基于Proteus学习单片机系列(六)——I2C总线AT24C04

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 基于Proteus学习单片机系列(一)--点亮LED 基于Proteus学习单片机系列(二)--驱动数码管 基于P ...

  4. 基于Proteus学习单片机系列(七)——AD转换及其应用--ADC0832

    获取更多资源,请关注微信公众号:嵌入式基地 获取项目资源:公众号后台回复:单片机仿真 项目下载 点击下载 1.电路图 2.程序 只在这里贴出主函数,其余的请点击上面(点击下载)进行下载,实在太麻烦. ...

  5. 基于 Proteus 的单片机仿真

    最近又要用proteus进行仿真51单片机-- 1.元器件的放置: 里面都是些英文,找起来头大,下面的一些表都是常见的单片机仿真使用的原件,很方便的就能找到了. 2.电源和地的放置 反正我在元件库中找 ...

  6. 单片机怎么通过按键控制计时器的开始和停止_学习电路仿真:基于proteus电路仿真软件的交通灯控制电路设计...

    电路仿真软件是当代重要软件之一,缺乏电路仿真软件,模拟运行环境将无法搭建.对于电路仿真软件,虽然市面上类别众多,但知名电路仿真软件为proteus.本文对于电路仿真软件的介绍,为基于proteus的交 ...

  7. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

    1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...

  8. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...

  9. 用Proteus学习51单片机之I2C(IIC)总线

    最近刚做好一个站,基于rails 3,教程为主,大家捧场看看,谢谢!www.yo945.com 在学习单片机的过程中,我常有这样的烦恼:随随便便一个芯片,少则占用三五个IO口,一般的就占用8个,稍微想 ...

  10. 基于proteus的功率_学习电路仿真:基于proteus电路仿真软件的步进电机仿真

    本文是电路仿真软件的进阶篇,对于电路仿真软件的基础篇,大家可翻阅往期文章哦.本文中,将基于proteus电路仿真软件的步进电机仿真,一起来了解下吧. 步进电机广泛应用在生产实践的各个领域.它最大的应用 ...

最新文章

  1. 设计模式C#实现(三)——外观模式
  2. jquery操作select取值赋值与设置选中[转]
  3. [Linux]Shell的运算符和特殊变量
  4. Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)
  5. mysql 引擎 校对,MySQL 字符集和校对
  6. nload实时查看linux服务器网络流量的工具
  7. Arduino的串口结束符及串口缓冲区
  8. 转 【MQTT】在Windows下搭建MQTT服务器
  9. Python项目:用所有朋友微信头像做云图图
  10. request 和require区别_合同翻译时如何区分使用request和require
  11. 第二章----基本语法
  12. UVA10196 Check The Check【模拟+回溯】
  13. Xamarin iOS教程之视图显示图像
  14. worddayi计算机考试题,期末试卷
  15. css小点,css3效果:animate实现点点点loading动画效果(二)
  16. 英语3500词(十一)entertainment主题(2022.1.23)
  17. 关于Java双大括号{{}}
  18. Voxceleb2 视频数据集下载(国内链接)
  19. C# -> (Cshape)笔记
  20. 工控安全-工控安全案例

热门文章

  1. Python faker模块
  2. C++获取C盘临时文件夹的方法
  3. 笔记本省电问题分析及其实用小技巧
  4. CoffeeScript是什么
  5. C语言-求一元二次方程的解-你是否会了呢?
  6. kangle安装php7.0_Kangle Easypanel面板 PHP多版本切换 安装图文教程
  7. 跨境公路货运调研分析-市场规模、市场份额、市场定位、产品类型以及发展规划
  8. 看小伙如何跟反爬抗争到底
  9. win7定时关机命令_IT技术分享06:如何让电脑在任何时间自动关机
  10. 无人机生成地图_无人机配方向传感器可自行创建地图+规划路线