历史上的今天
返回首页

历史上的今天

今天是:2024年08月28日(星期三)

正在发生

2020年08月28日 | 单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片

2020-08-28 来源:51hei

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD12864Data P2//LCD12864点阵型液晶显示器输入输出数据/命令端口

sbit LCD12864_RS=P0^7;//LCD12864点阵型液晶显示器数据/命令选择端

sbit LCD12864_RW=P0^6;//LCD12864点阵型液晶显示器读/写端

sbit LCD12864_EN=P0^5;//LCD12864点阵型液晶显示器使能端

//太阳

uchar code sun[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x08,0x10,0x00,0x00,0x10,0x08,0x00,0x00,0x10,0x08,0x00,0x00,0x08,0x10,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0x00};

//月亮

uchar code moon[]={0x00,0x00,0x00,0x00,0x03,0x80,0x02,0x40,0x02,0x20,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x20,0x02,0x40,0x03,0x80,0x00,0x00,0x00,0x00};

//星星

uchar code star[]={0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x80,0x00,0x00,0x54,0x54,0x20,0x08,0x08,0x20,0x02,0x80,0x12,0x90,0x08,0x20,0x20,0x08,0x00,0x00,0x00,0x00};

//人

uchar code robot[]={0x07,0xE0,0x08,0x10,0x12,0x48,0x10,0x08,0x1F,0xF8,0x10,0x08,0x30,0x0C,0x50,0x0A,0x50,0x0A,0x50,0x0A,0x50,0x0A,0x5F,0xFA,0x04,0x20,0x04,0x20,0x04,0x20,0x0E,0x70};

  void Delay(uint i)

{

   while(--i);

}

  void ReadBuzy()//读忙函数

{

   P2=0x00;

   LCD12864_RS=0;

   LCD12864_RW=1;

   LCD12864_EN=1;

   while(P2 & 0x80);

   LCD12864_EN=0;

}

  void LCD12864WriteCommand(uchar command)//写指令函数

{

   ReadBuzy();//读忙

   LCD12864_RS=0;

   LCD12864_RW=0;

   LCD12864_EN=1;

   LCD12864Data=command;

   Delay(100);

   LCD12864_EN=0;

}

  void LCD12864WriteData(uchar value)//写数据函数

{

   ReadBuzy();//读忙

   LCD12864_RS=1;

   LCD12864_RW=0;

   LCD12864_EN=1;

   LCD12864Data=value;

   Delay(100);

   LCD12864_EN=0;

}

  void LCD12864Init()//LCD12864点阵型液晶显示器初始化函数

{

   ReadBuzy();//读忙

   Delay(4000);

   LCD12864WriteCommand(0x30);//8位数据端口传输,且设置为基本指令集动作。

   Delay(100);

   LCD12864WriteCommand(0x30);//8位数据端口传输,且设置为基本指令集动作。

   Delay(37);

   LCD12864WriteCommand(0x0c);//设置整体显示,光标、闪烁全关,不反白。

   Delay(100);

   LCD12864WriteCommand(0x01);//清屏,并且DDRAM数据指针清零。

   Delay(10000);

   LCD12864WriteCommand(0x06);//进入点设定模式,设置地址指针自动加1。

}

  void CGRAM()//写自定义字符函数

{

   uchar i;

   LCD12864WriteCommand(0x30);//设置LCD12864点阵型液晶显示器数据端口D0-D7为8位控制接口,且这8位控制接口接收基本指令操作。

   LCD12864WriteCommand(0x40);//写自定义字符到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM第1个内存地址

          for(i=0;i<16;i++)//一个完整自定义字符占用LCD12864点阵型液晶显示器16(行)x16(列)显示界面,每一行占用2个字节(即16列)才显示该行某点字符,因单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,且一个完整自定义字符占用32个字节,那么要写完一个完整自定义字符占用的32个字节,必须分16次来写,这就是循环16次的原由。

  {

     LCD12864WriteData(sun[i*2]);//把第一个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。

     LCD12864WriteData(sun[i*2+1]);//把第二个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。为什么乘以2?由于单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,所以要乘以2。

    }

   LCD12864WriteCommand(0x50);//写自定义字符到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM第2个内存地址

   for(i=0;i<16;i++)//一个完整自定义字符占用LCD12864点阵型液晶显示器16(行)x16(列)显示界面,每一行占用2个字节(即16列)才显示该行某点字符,因单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,且一个完整自定义字符占用32个字节,那么要写完一个完整自定义字符占用的32个字节,必须分16次来写,这就是循环16次的原由。

{

    LCD12864WriteData(moon[i*2]);//把第一个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。

    LCD12864WriteData(moon[i*2+1]);//把第二个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。为什么乘以2?由于单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,所以要乘以2。

   }

   LCD12864WriteCommand(0x60);//写自定义字符到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM第3个内存地址

   for(i=0;i<16;i++)//一个完整自定义字符占用LCD12864点阵型液晶显示器16(行)x16(列)显示界面,每一行占用2个字节(即16列)才显示该行某点字符,因单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,且一个完整自定义字符占用32个字节,那么要写完一个完整自定义字符占用的32个字节,必须分16次来写,这就是循环16次的原由。

{

    LCD12864WriteData(star[i*2]);//把第一个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。

    LCD12864WriteData(star[i*2+1]);//把第二个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。为什么乘以2?由于单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,所以要乘以2。

   }

   LCD12864WriteCommand(0x70);//写自定义字符到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM第4个内存地址

   for(i=0;i<16;i++)//一个完整自定义字符占用LCD12864点阵型液晶显器16(示行)x16(列)显示界面,每一行占用2个字节(即16列)才显示该行某点字符,因单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,且一个完整自定义字符占用32个字节,那么要写完一个完整自定义字符占用的32个字节,必须分16次来写,这就是循环16次的原由。

{

    LCD12864WriteData(robot[i*2]);//把第一个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。

    LCD12864WriteData(robot[i*2+1]);//把第二个字节的自定义字符写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,供LCD12864点阵型液晶显示器读取显示。为什么乘以2?由于单片机写数据是以写2个字节为一次写到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM内存地址上,所以要乘以2。

   }

}

  void main()//主函数

{

   LCD12864Init();//LCD12864点阵型液晶显示器初始化函数

   CGRAM();//写自定义字符函数

   LCD12864WriteCommand(0x98);//LCD12864点阵型液晶显示器下半屏第二行第1个显示位置

   LCD12864WriteData(0x00);//清空DRAM内存地址上的内容

   LCD12864WriteData(0x00);//把自定义字符写进DDRAM内存地址0x00,供LCD12864点阵型液晶显示器读取显示。

   LCD12864WriteCommand(0x99);//LCD12864点阵型液晶显示器下半屏第二行第2个显示位置

   LCD12864WriteData(0x00);//清空DRAM内存地址上的内容

   LCD12864WriteData(0x02);//把自定义字符写进DDRAM内存地址0x02,供LCD12864点阵型液晶显示器读取显示。

   LCD12864WriteCommand(0x9A);//LCD12864点阵型液晶显示器下半屏第二行第3个显示位置

   LCD12864WriteData(0x00);//清空DRAM内存地址上的内容

   LCD12864WriteData(0x04);//把自定义字符写进DDRAM内存地址0x04,供LCD12864点阵型液晶显示器读取显示。

   LCD12864WriteCommand(0x9B);//LCD12864点阵型液晶显示器下半屏第二行第4个显示位置

   LCD12864WriteData(0x00);//清空DRAM内存地址上的内容

   LCD12864WriteData(0x06);//把自定义字符写进DDRAM内存地址0x06,供LCD12864点阵型液晶显示器读取显示。

   while(1);//固定循环

}


推荐阅读

史海拾趣

AUSTIN公司的发展小趣事

AUSTIN公司的创始人是赫伯特·奥斯汀(Herbert Austin)。在1905年,他制造了第一辆奥斯汀汽车,这标志着奥斯汀品牌的诞生。随着产品的推出,奥斯汀汽车很快获得了市场的认可,销量逐年攀升。直到1914年左右,奥斯汀始终是英国汽车工业的领导者,其汽车产品以高质量和可靠性而闻名。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

随着全球环保意识的提高,Elite Enterprises积极响应绿色环保的号召,将环保理念贯穿于产品的研发、生产和销售全过程。公司采用环保材料和节能技术生产LED产品,并积极参与各种环保公益活动。这些努力不仅提高了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事为概述性质,并未达到每个故事500字的详细程度。如需更详细的描述,请查阅公司官方资料或相关新闻报道。

General Magnetics Inc公司的发展小趣事
绝缘损坏或元件故障可能导致漏电,影响电路的安全性和稳定性。
Davico Industrial Ltd公司的发展小趣事
长时间高负荷运行、散热不良或内部元件短路等都可能引起过热。
Abundance Enterprise Company公司的发展小趣事

Abundance Enterprise Company成立于XXXX年,初期专注于电子元器件的研发和生产。公司凭借对市场需求的敏锐洞察,迅速定位在高端电子元器件市场,通过精准的市场定位和高质量的产品,逐渐在电子行业中占据了一席之地。初创团队凭借扎实的技术基础和不懈的努力,成功打破了国外品牌在高端市场的垄断,为国内电子元器件行业树立了新的标杆。

ENERGIZER公司的发展小趣事

ENERGIZER公司,作为全球领先的电池制造商,自1896年以来就以其技术革新引领着电池能源行业的发展。1896年,ENERGIZER发明了全球第一粒电池,这一创新性的产品为电子行业的发展奠定了基石。随着科技的不断进步,ENERGIZER的电池技术也在不断革新,以满足日益增长的电子设备需求。如今,ENERGIZER的电池已经广泛应用于各种电子设备中,从遥控器、手电筒到高端电子设备,其优良的品质和耐用的性能受到了全球消费者的广泛认可。

问答坊 | AI 解惑

初识STM8S的电源管理

STM8S 电源管理 丰富的片上设备模块和可配置熔丝选项是AVR强过老一辈MCU的优势之一。不过STM8S出世以后,AVR的这一优势就有点光环顿失了。 下面是我对电源管理部分的理解,这是我看过STM8S手册和STM8S20X器件资料后的初步认识。 除了运行模式 ...…

查看全部问答>

请教:BGA封装的元件,扇出后引脚的编号改变了?

有个BGA封装的元器件,我扇出后感觉引脚的编号改变了?不知道是什么原因? [ 本帖最后由 静若幽兰 于 2010-5-15 10:12 编辑 ]…

查看全部问答>

如何做GPS模块开发,刚入门,

本人刚接触GPS,就想买个U口的GPS模块,然后通过GPS数据接口协议NMEA-0183,来读取数据,不知道有没有什么指令初始化什么的?是不是把模块连到电脑上就好使???我就想自己取个经纬度那些简单的数据…

查看全部问答>

关于与USB通信的应用程序的问题!

我要写一个与驱动程序通信的应用程序,主要完成对USB设备的读写,那么应用程序需要编写的内容包括那些?…

查看全部问答>

调试时不能在断点停止

大家好:   小弟用VS2005 + CE5.0 + C#,   用网线可以下到设备运行,但不能在断点停止,说我尚未加载指定的模块, 请问是怎样解决?  谢谢!…

查看全部问答>

中科院工程硕士课件分享——嵌入式系统分析

这门课的授课教师,是天一集成的总裁,杨栋毅博士。比较新颖的是以一个做企业的人的视角看嵌入式系统的开发。 听了几次课以后感觉这是不可多得的一门课程,有兴趣的同学可以下载了以后一同学习讨论。…

查看全部问答>

天祥电子公开了TX-2440A视频教程-无删减完整版

郭天祥公开了2440视频 全套     8G  115网盘下载了   尽快啦   免得续期   天祥电子公开了TX-2440A视频教程-无删减完整版   1. http://u.115.com/file/f3dd5d757e#Download1.rar2. htt ...…

查看全部问答>

基于Iperf的BeagleBone网络性能测试

作者:chenzhufly QQ:36886052 ( 转载请注明出处) 一. Iperf简介: Iperf是一个网络性能测试工具。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失。Iperf在linux和windows ...…

查看全部问答>

分立电阻器检定测试系统的配置的测试说明

电阻器电压系数测试 高兆欧姆电阻器(>107Ω)在施加电压后,其电阻往往发生变化。这个电阻变化是通过电压系数来描述的。为了计算电压系数(单位:%/V), 需要使用不同电压值时的两个电阻读数: 电压系数= 其中,R1 = 第一次施加电压(V1)计算 ...…

查看全部问答>

离职的总总原因

新的一年开始,忙着换工作、忙着换房子! 跳槽的原因不胜杖举,大致可以分为下几类:   一、待遇问题,感到自己的付出和收入不成正比。每次和应聘者交流,几乎没有一个应聘者谈到因为待遇的原因而跳槽;但事实是大部分人选择跳槽都是由于薪金问 ...…

查看全部问答>