历史上的今天
今天是: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);//固定循环 }
下一篇:单片机T0方式2实现简单时钟
史海拾趣
|
STM8S 电源管理 丰富的片上设备模块和可配置熔丝选项是AVR强过老一辈MCU的优势之一。不过STM8S出世以后,AVR的这一优势就有点光环顿失了。 下面是我对电源管理部分的理解,这是我看过STM8S手册和STM8S20X器件资料后的初步认识。 除了运行模式 ...… 查看全部问答> |
|
有个BGA封装的元器件,我扇出后感觉引脚的编号改变了?不知道是什么原因? [ 本帖最后由 静若幽兰 于 2010-5-15 10:12 编辑 ]… 查看全部问答> |
|
本人刚接触GPS,就想买个U口的GPS模块,然后通过GPS数据接口协议NMEA-0183,来读取数据,不知道有没有什么指令初始化什么的?是不是把模块连到电脑上就好使???我就想自己取个经纬度那些简单的数据… 查看全部问答> |
|
这门课的授课教师,是天一集成的总裁,杨栋毅博士。比较新颖的是以一个做企业的人的视角看嵌入式系统的开发。 听了几次课以后感觉这是不可多得的一门课程,有兴趣的同学可以下载了以后一同学习讨论。… 查看全部问答> |
|
郭天祥公开了2440视频 全套 8G 115网盘下载了 尽快啦 免得续期 天祥电子公开了TX-2440A视频教程-无删减完整版 1. http://u.115.com/file/f3dd5d757e#Download1.rar2. htt ...… 查看全部问答> |
|
作者:chenzhufly QQ:36886052 ( 转载请注明出处) 一. Iperf简介: Iperf是一个网络性能测试工具。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失。Iperf在linux和windows ...… 查看全部问答> |
|
电阻器电压系数测试 高兆欧姆电阻器(>107Ω)在施加电压后,其电阻往往发生变化。这个电阻变化是通过电压系数来描述的。为了计算电压系数(单位:%/V), 需要使用不同电压值时的两个电阻读数: 电压系数= 其中,R1 = 第一次施加电压(V1)计算 ...… 查看全部问答> |




