菜鸟学习51单片机之12864液晶(无字库)
最容易理解的点阵式12864LCD指令说明书
点阵式128*64LCD显示原理(不带字库)
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DO S前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的码。而剩下的低128位则留给英文字符使用,即英文的码。
那么,得到了汉字的码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:
图1 “A”字模图
而中文的“你”在字模中的记载却如图2所示:
图2 “你”字模图
12864点阵型LCD简介
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。管脚号管脚名称LEVER 管脚功能描述
1 VSS 0 电源地
2 VDD +5.0V 电源电压
3 V0 - 液晶显示器驱动电压
4 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据
D/I=“L”,表示DB7∽DB0为显示指令数据
5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0
51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)
51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)2009-10-19 16:47
经过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。
适用于开发板:51单片机(AT89S52)+带字库液晶12864(ST7920)+DS1302(实时时钟)
实现功能:简单,数字时钟+日期(以后会不断完美)。
C语言源程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
/*DS1302 端口设置 */
sbit SCK=P3^6; //DS1302时钟
sbit SDA=P3^4; //DS1302 IO
sbit RST = P3^5; // DS1302复位
bit ReadRTC_Flag; //读DS1302全局变量
/* 12864端口定义*/
#define LCD_data P0 //带字库液晶12864数据口
sbit LCD_RS = P2^4; //寄存器选择输入
sbit LCD_RW = P2^5; //液晶读/写控制
sbit LCD_EN = P2^6; //液晶使能控制
sbit PSB=P2^1; //并口控制
sbit RES=P2^3;
uchar code dis1[] = {" 电子设计天地"}; //液晶显示的汉字
uchar code dis2[] = {"有志者,事竟成!"};
uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'}; unsigned char temp;
无字库12864程序
12864.h #ifndef __12864_H__ #define __12864_H__ #include #include /*************************************** 利用I/O口模拟点阵液晶所需时序点阵液晶控制端口定义,需根据硬件适当改变****************************************/ sbit LCD_RS = P2^0;//控制端口定义sbit LCD_RW = P2^1; sbit LCD_E = P2^2; sbit LCD_CSA = P2^3;//H选通,即高电平有效sbit LCD_CSB = P2^4; #define LCD_Data P0//LCD数据端口8位#define R 1 #define L 2 /***************************************** 函数声明*****************************************/ void ReadStatusLCD(unsigned char select);//从LCD读出忙标志位unsigned char ReadDataLCD(unsigned char select);//从LCD读出数据void WriteDataLCD(unsigned char WDLCD,unsigned char select);//向LED写入数据void WriteCommandLCD(unsigned char WCLCD , unsigned char BusyC,unsigned char select);//向LCD写入命令void LcdReset(void) //初始化函数,完成液晶模块的初始设置void clear_LCD(unsigned char select);//清屏函数void Clr_All_Lcd(void);//全清屏函数void set_XY(unsigned char Column,unsigned char Page);//设置数据写入或读出的地址,通过页号和列数可以唯一确定一个地址void xy_Write(unsigned char Column,unsigned char Page,unsigned char dataW);//向指定行列写数据void LcmPutDots(unsigned char Column,unsigned char Page, unsigned char DotByte );//显示点void whiteword(unsigned char Column,unsigned char Page, const unsigned char puts[][16] );//显示16×16点阵的编码void WhiteWord_Com(unsigned char Column,unsigned char Page,unsigned char C_num, unsigned char V_num, unsigned char * puts );//通用的显示函数void Drawing_dot(unsigned char x,unsigned char y); void Drawing_line_vertical(unsigned x); #endif 12864.c /**************************************************** LCD12864点阵液晶屏,通过I/O口直接控制,采用模拟时序控制****************************************************/ #include"12864.h" #include /*********************************************************** 功能:从LCD读取状态位变量:select用于选择LCD屏的左右,1选择左屏,2选择右屏***********************************************************/ void ReadStatusLCD(unsigned char select) { switch(select) { case 1:{LCD_CSA=1;LCD
基于proteus的不带字库的12864的仿真程序(带仿真图)
基于proteus的不带字库的12864的仿真
程序(带仿真图)
作者:心如止水(武汉工程大学)
/****************************************************** ******
本程序为不带字库的12864汉字及英文字符的显示程序,
可以说此程序是所有12864显示程序中最简单最易懂的
显示程序。之所以写这个程序,是因为我看很多学单片
机的人(特别是初学者)对12864有一种恐惧感,觉得它
很难,看完这个程序,相信你能明白它的显示原理。
还要注意的是:带中文字库和不带中文字库的程序不一样,
不可混用。
******************************************************* *****/
先上图吧,哈哈
下面看程序吧,相信你一定能看懂,很简单的哟!!!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//sbit databus=P1;
#define databus P1
//sbit Reset = P3^0; //复位
sbit rs = P3^7; //指令数据选择
sbit e = P3^5; //指令数据控制
sbit cs1 = P3^3; //左屏幕选择,低电平有效
sbit cs2 = P3^4; //右屏幕选择
sbit wr = P3^6; //读写控制
//sbit busy = P1^7; //忙标志
void SendCommand(uchar command); //写指令
无字库12864液晶屏滚动显示程序共17页文档
无字库12864液晶屏滚动显示程序[转] #include
#include
#include
#define Lcd_Bus P0 //MCU P0<------> LCM
#define Disp_On 0x3f//开显示
#define Disp_Off 0x3e//关显示
#define Col_Add 0x40//列地址
#define Page_Add 0xb8//页地址
#define Start_Line 0xc0//起始页
sbit cs1=P2^3; //Master chip enable
sbit cs2=P2^4; //Slave chip enable
sbit Enable=P2^2; // mode Enable single
sbit Di=P2^0; //Data or Instrument Select
sbit RW=P2^1; //Write or Read
sbit Lcd_Rst=P2^5; //Lcm reset
/*****************************
字模,此字体下对应的
点阵为:宽x高=16x16
*****************************/
unsigned char code Chinese_character[][32]=
{
{0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x 12,0xF2,0x02,0x00 ,
0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22 ,0x22,0x22,0x7F,0x00,0x00},/*"西",0*/
51单片机带字库12864液晶动态汉字显示C语言源程序
51单片机带字库12864液晶动态汉字显示C语言源程序
2009-10-17 19:36
实验芯片为:AT89S52,带字库液晶屏:12864,实现的目的:动态一个汉字一个汉字显示。
其实和显示汉字的程序一样,只是稍做一下修改即可。C语言源程序如下:
#include <stdio.h>
#include <math.h>
#include <reg52.h>
#include <string.h>
sbit RS=P2^4;
sbit WRD=P2^5;
sbit E=P2^6;
sbit PSB=P2^1;
sbit RES=P2^3;
void TransferData(char data1,bit DI);
void delayms(unsigned int n);
void delay(unsigned int m);
void lcd_mesg003(unsigned char code *addr1);
unsigned char code IC_DAT[]={
"我是一个中国人啊"};
void initinal(void)
{
delay(40);
PSB=1; //并口工作模式
delay(1);
RES=0; //复位
delay(1);
RES=1; //复位置高
delay(10);
TransferData(0x30,0);
delay(100);
TransferData(0x30,0);
delay(37);
TransferData(0x08,0);
delay(100);
51单片机12864LCD显示..
D R / L R E A C 2 A C 2 A C 2 D 2 D 2
B
D=1:整体显示ON C=1:游标ON B=1:游标位置ON
72us
0
0
0
0
0
1 D L A C 4 A C 4 A C 4 D 4 D 4
X
X
设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM的内容
72us
0
0
指令码
指令 R S 0 0 R W 0 0 D B 7 0 0 D B 6 0 0 D B 5 0 0 D B 4 0 0 D B 3 0 0 D B 2 0 0 D B 1 0 1 I / D C D B 0 1 X 说明 执行时间
清除显示 地址归位
将DDRAM填满“20H”,并且设定DDRAM的地址计数器(AC)到“00H” 设定DDRAM的地址计数器(AC)到“00H”,并且将游标移到开头原点位置;这个指令 并不改变DDRAM的内容
4.6ms 4.6ms
进入点设定
显示状态开/ 关 游标或显示 移位控制 功能设定 设定 CGRAM地 址 设定 DDRAM地 址 读取忙碌标 志(BF)和 地址 写资料到 RAM 读出RAM的 值
0
0
0
0
0
0
0
1
S
指定在资料的读取与写入时,设定游标移动方向及指定显示的移位
12864液晶编程以及PROTUES仿真
12864液晶编程以及PROTUES仿真
AMPIRE 128X64显⽰器
1. LCD 接⼝
液晶显⽰器件(LCD )独具的低压、微功耗特性使他在单⽚机系统中特得到了⼴泛的应⽤,常⽤的液晶显⽰模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应⽤较为⼴泛,因为汉字不能像西⽂字符那样⽤字符模块即可显⽰,要想显⽰汉字必须⽤图形模块。
本课设所选择的LCD 是AMPIRE128×64的汉字图形型液晶显⽰模块,可显⽰汉字及图形,图形液晶显⽰显⽰器接⼝如图3-1所⽰。
C S 1
1
C S 22G N
D 3V C C 4V 05R S 6R /W 7
E 8D B 09D B 110D B 211D B 312D B 413D B 514D B 615D B 716R S T 17-V o u t 18
LCD2
AMPIRE128X64
图3-1 LCD 电路图
表3.1 AMPIRE128×64接⼝说明表
管脚电平说明
管脚
号
1 CS1 H/L ⽚选择信号,低电平时选择前64列
2 CS2 H/L ⽚选择信号,低电平时选择后64列
3 GND 0V 逻辑电源地
4 VCC 5.0V 逻辑电源正
5 V0 LCD驱动电压,应⽤时在VEE与V0之间加⼀2K可调电阻
6 RS H/L 数据\指令选择:⾼电平:数据D0-D7将送⼊显⽰RAM;
低电平:数据D0-D7将送⼊指令寄存器执⾏
7 R/W H/L 读\写选择:⾼电平:读数据;低电平:写数据
8 E H/L 读写使能,⾼电平有效,下降沿锁定数据
9 DB0 H/L 数据输⼊输出引脚
12864LCD液晶显示原理及使用方法
12864LCD液晶显示原理及使用方法
液晶简介
液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图
下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明
管脚号管脚名称LEVER 管脚功能描述
1GND 0 电源地
2VCC+5.0V 电源电压
3VLCD - 液晶显示器驱动电压
4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据
中文不带字库的KXM12864说明(附带规格与KS0108英文说明)
————————————————————————————————————————————————————————————————————————————————
LCD1
A M P IR E 1 2 8X64
与带字库液晶不同,此块液晶中含有两个液晶驱动器,一块驱动器控制 64*64 个点,左 右显示,这就是为什么 AMPIRE128*64 引脚有 CS1 和 CS2 的原因。学习液晶主要看的它的 指令系统,再次先说明一下“页”的概念,此液晶有 8 页,一页有 8 行。68/8=8;如下图所 示。
2
2.原理简图
KXM12864J 128SEG/64COM DOT MXTIX LCD DRIVER
3.主要各部分详解
————————————————————————————————————————————————————————————————————————————————
March 2002
X 地址寄存器是一个三位页地址寄存器,其输出控制着 DDRAM 中 8 个页面的选 择,也是控制着数据传输通道的八选一选择器。X 地址寄存器可以由 MPU 以指令形 式设置。X 地址寄存器没有自动修改功能,所以要想转换页面需要重新设置 X 地址 寄存器的内容。 8)Y 地址计数器
基于51单片机的12864液晶显示程序
rs=1; P0=dat; delayms(5); en=1; delayms(5); en=0; }
void init() //液晶初始化 {
dula=0; wela=0;
psb=1; rw=0; write_com(0x30); write_com(0x0c); write_com(0x01); }
write_dat(dis3[i]); delayms(5); } write_com(0x99); for(i=0;i<12;i++) {
write_dat(dis4[i]); delayms(5); } while(i); }
void main() {
LCD12864液晶的使用
#define uchar unsigned char
#define uint unsigned int
#define LCD_databus P0 //LCD8 位数据口
uchar num;
sbit RS=P2^2;
//RS 为 0 命令;1 数据
sbit RW=P2^1;
//RW 为 1--写;0--读
//列的最大
值为 64
column= 0x40|column;
//列的首地
4
大海橡树百度空间 http://hi.baidu.com/echoas
址为 0x40 write_LCD_command(column);//列位置
} void SetOnOff(uchar onoff) //显示开关 函数:0x3E 是关显示,0x3F 是开显示 {
write_LCD_data(a[2*j][i]);//每隔一行取一次数组中的数据 } SelectScreen(2); Set_page(j); Set_column(0); for(i=0;i<64;i++) //显示右屏 {
write_LCD_data(a[2*j+1][i]);//每隔一行取一次数组中的数据 } } } 取出图片的数据是二维数组形式!注意,液晶是先显示左半屏,再显示右半屏,但 是取数组中的元素是逐个往下取出的,所以是对于一个半屏而言,每隔一行取数组中的元素, 而隔去的那一行是另一个半屏要取的数据!这一点一定要注意。 还有一点要补充的就是,这个取模软件只能识别 BMP 和 ICO 格式的单色图片,如果我 们选择的图片不是 128*64 大小的话,可以通过软件将其改成 128*64 大小的,如果我们直接 用软件取模的话,显示的会是乱码,解决办法是我们可以通过 windows 自带的画图工具, 什么也不做修改,将大小设置好的图片另存为 BMP 单色文件就行了,然后再用取模软件取 模就 OK 了,=^_^ = !算了,给大家截个图
用51单片机控制12864显示数字时钟
用51单片机控制12864显示数字时钟
用51单片机控制12864显示数字时钟
里面有128564显示汉字的程序,自己研究下,不过是用msp430控制的,你改改端口i就可以了。
#include "msp430x26x.h"
#define uchar unsigned char
#define uint unsigned int
#define iDat 1 //数据标志
#define iCmd 0 //指令标志
#define LCDb_RS 0x20 //定义四个控制引脚
#define LCDb_RW 0x40
#define LCDb_E 0x80
#define LCDb_RST 0x04
#define LCDb_L1 0x80 //第一行的地址
#define LCDb_L2 0x90 //第二行的地址
#define LCDb_L3 0x88 //第三行的地址
#define LCDb_L4 0x98 //第四行的地址
#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制操作
#define LCDb_SET_RW P1OUT|=LCDb_RW
#define LCDb_SET_E P1OUT|=LCDb_E
#define LCDb_SET_RST P8OUT|=LCDb_RST
#define LCDb_CLR_RS P1OUT&=~LCDb_RS
#define LCDb_CLR_RW P1OUT&=~LCDb_RW
#define LCDb_CLR_E P1OUT&=~LCDb_E
12864无字库液晶 简单动画显示
#include #define LCDLCDDisp_Off 0x3e#define LCDLCDDisp_On 0x3f#define Page_Add 0xb8//ye#define LCDCol_Add 0x40//lie#define Start_Line 0xC0//hang/*****液晶显示器的端口定义*****/#define data_ora P0 /*液晶数据总线*/sbit LCDMcs=P2^1 ; /*片选1*/sbit LCDScs=P2^2 ; /*片选2*/sbit RESET=P2^3 ; /*复位信号*/sbit LCDDi=P2^4 ; /*数据/指令 选择*/sbit LCDRW=P2^5 ; /*读/写 选择*/sbit LCDEnable=P2^6 ; /*读/写 使能*/char code Hz[]={/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\新建文件夹\10._1.bmp --*//*-- 宽度x高度=64x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0x06,0x02,0x01,0x01,0x01,0x02,0x02,0x0C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,0x01,0x01,0x01,0x02,0x06,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x8F,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF1,0xD3,0x6C,0x74,0x74,0x32,0x31,0x19,0x1D,0x1C,0x1C,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1C,0x1C,0x1C,0x1C,0x19,0x31,0x32,0x74,0x74,0x6C,0xD3,0xF1,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0xF8,0xFC,0xE6,0xC7,0xE3,0xF3,0x9F,0x17,0x77,0xFF,0x75,0x00,0x00,0x00,0x50,0xF8,0xF8,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x70,0x00,0x00,0x00,0x75,0xFF,0x77,0x07,0x9F,0x73,0xF3,0xC7,0xE6,0xFC,0xF8,0xC8,0x05,0x0F,0x0F,0x1F,0x15,0x37,0x7B,0x78,0x7C,0x7D,0x7F,0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x7F,0x7D,0x7C,0x78,0x3A,0x77,0x15,0x1F,0x0F,0x0F,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x84,0x7C,0x3C,0x5C,0x48,0xC8,0xF0,0xF0,0xF0,0x90,0x90,0x90,0xF0,0xF0,0xF0,0xF0,0x90,0x90,0xF0,0xF0,0xF0,0xF0,0x90,0x90,0x90,0x90,0xF0,0x78,0x78,0x48,0x6C,0xFC,0x5C,0x46,0x45,0x75,0x7C,0x7C,0x44,0x44,0x44,0x7C,0xFC,0xDC,0xDC,0xDC,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,//0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0x21,0x11,0x11,0x21,0xC1,0x01,0x01,0x01,0x81,0x00,0xA8,0xF8,0xB8,0x38,0x70,0x38,0x30,0xA0,0xF0,0xE0,0x40,0x00,0x00,0x00,//0x01,0x01,0xF1,0x01,0x81,0x41,0x21,0x11,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x
无字库PG12864液晶屏技术资料
#define LCM12864_PAGE_START_ADDR 0xb8
// 页起始地址,可以用 LCM12864_PAGE_START_ADDR+x 设置当前页。(x<8)
#define LCM12864_COL_START_ADDR 0x40
// 列起始地址,可以用 LCM12864_COL_START_ADDR+x 设置当前列。(x<64)
10/20
PG12864LRS-JNN-H 技术手册(完整版)
DoYoung.net 原创技术资料
设置显示超始说明
CS1(左半屏)
CS2(右半屏)
12864 是由两片 64*64 组成,使用 CS1/CS2 使能(可同时使能)。每半屏 8 页,每页中字节数据由低到高。
驱动程序(C 语言)
/*********************************************************************************************
机械参数表
www.doyoung.net
机械结构图
2/20
PG12864LRS-JNN-H 技术手册(完整版)
DoYoung.net 原创技术资料
www.doyoung.net
背光电器参数
3/20
PG12864LRS-JNN-H 技术手册(完整版)
无字库12864液晶模块应用
无字库12864液晶模块应用
图1
在上次介绍的日历钟的基础上扩展一下:让它具备检测大气温度和湿度的
功能,一天24 小时不间断运行并定时检测,于是,日历钟就摇身一变成为一
个小小温湿度计啦。虽然气象要素很多,不过我们最常用的就是气温和湿度。一个是冷热程度,一个是环境空气中含水蒸气的多少。一般家用温度计很常见,湿度计就比较少,以前有一种干湿球温度计,但是用起来比较麻烦,准确度也不高。现在应用电子技术我们就可以做一个可以同时显示温度、湿度、时间的小仪器,放在家里以便随时监测我们的小环境。它的特点如下:
1.在单片机ATMega8L-8PU(以下简称M8)和日历钟电路DS1302 的基础上,使用一个在工厂经过精密校准的数字式温度、湿度传感器AM2301 作为探头;
2.当24 小时连续工作时,纵然工作电流仅为几毫安,也不宜使用纽扣电池
供电。这次选用可充电的3.6V 聚合物锂电池,使它的放置地点可以不受电源
限制,可以在室内,也可以在不受阳光直射和雨水接触的室外;
3.具有文字和图形界面,可以显示温度和湿度数值,以及12 小时内的湿度
变化记录曲线,为什么是湿度曲线呢?因为气温的变化规律一般比较稳定,湿度就不一样了,我们可以从湿度变化趋势估计一下未来的晴雨可能,这比看燕
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//设定列
}
三.取字模
字模软件的设定如下图所示:
菜鸟学习 51 单片机
while(1)世界
四.写入数据(字模是 8*16,按照下面的方式写入数据)
Lcd12864Point(page,x,y);
//设定地址
for(number = 0;number < 8;number++) //写入 8 个字模数据
菜鸟学习 51 单片机
while(1)世界
现在开始讲解如何使用,看这篇讲解前,请先到网盘去下载本教 程的仿真图和程序,结合起来更容易明白。
上图是仿真的结果。 在仿真软件中找出的 12864 液晶是没有字库的,对于仿真软件中 液晶的控制和平常的有点不同。一块液晶是由两块 64×64 的液晶显 示模块组合而成。下面是各管脚的介绍。
菜鸟学习 51 单片机
while(1)世界
至于写命令,写数据,读数据的函数基本上和 1602 液晶是一样
的。大家可以对着程序看。都有注释。控制液晶就需要知道几个重要
的命令和液晶的地址。
(1) 显示开/关设置 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
L L L L H H H H H H/L
//有 8 页,循环 8 次
{
Lcd12864Point(i,0,0); //这个就是上面讲到的函数,确定位置
for(j = 0 ;j < 64;j++) //每一块液晶显示模块有 64 列
{
Lcd12864Write(DAT,0x00); //写入 0x00 来清屏
}
}
}
具体的使用如下:初始化函数中调用了清全屏 Lcd12864Clear(3); //清全屏
Lcd12864Write(CMD,0xb8 + page); Lcd12864Write(CMD,0xC0 + x); Lcd12864Write(CMD,0x40 + y); }
入口函数就是设定的页数,起始行数,列数。后面的 0xb8 是页的起 始地址,0xc0 是行的起始地址,0x40 是列的起始地址。(此处的行是 起始行)。
功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。
地址就是 DD RAM 的行地址,页地址存储在 X 地址计数器中,
DB2-DB0 可表示 8 页,读写数据对页地址没有影响,除本指令可改
变页地址外,复位信号(RST)可把页地址计数器内容清零。DDRAM
地址映像表如下:
Y 地址
0
12
………
现在将如何在液晶上面显示字。 一.清屏
/* 选择屏幕来清屏 */
菜鸟学习 51 单片机
while(1)世界
void Lcd12864Clear(uint8 selet)
{
uint8 i,j;
Lcd12864SeletScreen(selet); //选择屏,分左屏和又屏,这个函数在程序中有
for(i = 0;i < 8 ;i++)
Z 地址计数器控制的,该命令自动将 A0-A5 位地址送入 Z 地址计数器,起始地
址可以是 0-63 范围内任意一行。Z 地址计数器具有循环计数功能,用于显示行
扫描同步,当扫描完一行后自动加一。
(3) 设置页地址 CODE:R/W RS DB7 DB6 DB5 DB4 DB3
LL HL HHH
பைடு நூலகம்
DB2 DB1 DB0 页地址(0~7)
二.写入地址
void Lcd12864Point(uint8 page,uint8 x,uint8 y)
{
Lcd12864Write(CMD,0xb8 + page);
//确定页
Lcd12864Write(CMD,0xC0 + x);
//设定起始行
Lcd12864Write(CMD,0x40 + y);
功能:设置屏幕显示开/关。
DB0=H,开显示;DB0=L,关显示。不影响显示 RAM(DD RAM)中的内容。
(2) 设置显示起始行
CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
LL HH
行地址(0~63)
功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由
{
Lcd12864Write(DAT,*p);
p++;
}
Lcd12864Point(page + 1,x,y);
//由于是 8×16,换页再写入 8 个数据
for(number = 0;number < 8;number++)
{
Lcd12864Write(DAT,*p);
p++;
}
//对讲解还有疑问的欢迎到论坛的 51 版块提问。
菜鸟学习 51 单片机
while(1)世界
菜鸟学习 51 单片机
----12864 液晶(无字库)
《菜鸟学习 51 单片机》由 while(1)世界推出的非常简单的 51 单片机教程。帮助刚接触单片机的童鞋快速入门。
这一讲是由 Admin 编写!读者有什么问题的可以在 while(1) 世界的 51 版块发帖提问!童鞋可以在 while1 世界网盘下载本教程的 仿真图和程序。这次的程序采用的是模块化编程写的,如果不懂模块 化的,欢迎下载菜鸟学习 51 单片机之模块化编程学习。
61 62 63
DB0
|
PAGE0
X=0
DB7
DB0
菜鸟学习 51 单片机
|
PAGE1
DB7 ………………
DB0
|
PAGE6
DB7
DB0
|
PAGE7
DB7
while(1)世界
X=1 ……
X=6
X=7
在写入数据的时候就需要先设定页数和列数。在程序中就有专门用来 指定位置的函数:
/* 定写入的地址,选择页,起始行和列 */ void Lcd12864Point(uint8 page,uint8 x,uint8 y) {