12864 资料大全

12864  资料大全
12864  资料大全

/**************************************************************************************

程序名称:时间温度控制系统(128*64LCD+ds1302+ds18b20)

主要功能:温度计时钟闹铃密码锁篮球器计算器温度控制键盘锁系统设置等。

主要说明:程序全部定义在一个C文件中。

作者:LiJH

时间:2008.6.20

版本:LiJH-V1.0

**************************************************************************************/

本图文菜单系统技术交流

网址:21单片机开发实验室

https://www.360docs.net/doc/67425090.html,

QQ:978710555

**************************************************************************************/

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define time_count 0x3cb0

#define close 1

#define open 0

/*============ 状态控制及温感器总线定义==============*/

#define b20_io P0_0 // DS18B20总线

#define pw_oc P3_7 // 密码锁开启控制(黄灯)

#define buzzer P0_5 // 蜂鸣器

#define lcd_bl P0_6 // 背光控制口

#define als_th P0_4 // 上限温度警报(红灯)

#define als_tl P3_6 // 下限温度警报(绿灯)

#define keyboard P1 // 键盘数据口

/*================= ST7920LCD 定义===================*/

#define comm 0 // lcd指令

#define dat 1 // lcd数据

#define lcd_rst P0_7 // lcd复位

#define lcd_e P3_0 // lcd使能

#define lcd_rw P3_1 // lcd读写

#define lcd_rs P3_2 // lcd数据命令

#define busy P2_7 // 忙碌位

#define lcd_data P2 // lcd(8bit)数据传输

/*=============== DS1302 寄存器地址定义===============*/

#define d02_rst P0_1 // DS1302使能

#define d02_data P0_2 // DS1302数据线

#define d02_sclk P0_3 // DS1302脉冲

#define d02_wrc 0x8e // 1302读写RAM控制(1允许0禁止)

#define d02_year 0x8c // 年

#define d02_weeks 0x8a // 星期

#define d02_month 0x88 // 月

#define d02_day 0x86 // 日

#define d02_hour 0x84 // 时

#define d02_minute 0x82 // 分

#define d02_second 0x80 // 秒

#define d02_signs 0xc0 // 系统状态(记录设置标记)

#define d02_passw 0xc2 // 密码寄存器首位(有3位下位地址加2,初始值为:741456)#define d02_alm 0xc8 // 闹铃时间小时位(下位为分钟位加2)

#define d02_temp 0xcc // 温度上限警报(有两位下位位下限加2)

#define d02_initsi 0xd4 // 1302初始化标记(为0xb4时,说明已经初始化)

#define ret_ds1302() d02_rst=0;d02_sclk=0;d02_rst=1 // 1302读写复位

#define end_ds1302() d02_sclk=1;d02_rst=0 // 1302读写结束

/*===============================全局变量定义==================================*/ typedef struct // 定义时间类型

{

uchar hour;

uchar minute;

uchar second;

}time;

typedef struct // 定义日期类型

{

uchar year;

uchar month;

uchar day;

uchar week;

}date;

typedef union // 定义温度类型

{

int temp_data;

uchar t_data[2];

}trdata;

trdata bdata temp; // 温度警报值暂存

date idata today={'8',1,1,1}; // 日期暂存

time idata now={0x12,0,0} , save_time={0x12,0,0};

// 时间暂存(now是读出时间暂存save_time上一时间暂存)

uchar idata time_tick=20,time_tick1=20,alarm_time[2],als_temp[2],

// T0中断数, T1中断数, 闹铃时间, 警报温度

bl_delay=15,temp_delay=5,opera[2][12],resu[12],

// 背光时间, 温度更新时间, 计算器数据寄存, 结果寄存

i,j,save1,temp_min=0;

// 计算器i/j下标,中间暂存,温度更新(分)

uchar bdata signs=0; // 系统标记寄存器

sbit bl1=signs^7; // bl1,bl0背光选择位(00 延时,01 常开,10 关闭)

sbit bl0=signs^6;

sbit di1=signs^5; // di1,di0显示模式(00模式1,01模式2,10模式3)

sbit di0=signs^4;

sbit meu=signs^3; // 菜单显示方式(0 图片,1 文字)

sbit keb=signs^2; // 键盘锁(0 无锁,1加锁)

sbit alm=signs^1; // 闹钟启动位(0 关闭,1开启)

sbit als=signs^0; // 报警启动位(0 启动,1关闭)

uint bdata run_signs=0; // 运行标记寄存器

sbit ds18b20=run_signs^0; // 温感器存在标记(0不存在,1存在)

sbit temp_pn=run_signs^1; // 温度正负号标记(0正,1负)

sbit temprun=run_signs^2; // 温感器运行标记(0否,1启动)

sbit nba_tim=run_signs^3; // 篮球计时器标记(0关闭,1启动)

sbit adju_si=run_signs^4; // 数字更改连续标记(1连续)

sbit cal_del=run_signs^5; // 计算器显示点标记(0没有显示)

sbit cal_run=run_signs^6; // 计算完毕标记(1有效)

sbit oth_run=run_signs^7; // 其他标记

sbit alm_run=run_signs^8; // 闹钟时间到达标记(1有效)

sbit dis_sig=run_signs^9; // 显示时间标记(1有效)

sbit lock_op=run_signs^10; // 关锁时间到标记(1有效)

sbit b20time=run_signs^11; // 温感器重新读温度标记(1有效)

sbit t0_isr =run_signs^12; // TO中断标记(1有效(1s)

sbit thl_als=run_signs^13; // 温度警报标记

sbit init_d2=run_signs^14; // 模式2初始显示

sbit buzstop=run_signs^15; // 蜂鸣器停止标记

/*===============================字体显示代码==================================*/ uchar code weeks[7][2]={"一","二","三","四","五","六","日"}; // 星期//图片中文

uchar code menu_cn[6][8]={"调整","工具","设置","保密","版本","退出"};

uchar code menu_cn_2[6][6]={"调整","工具","设置","保密","版本","退出"}; // 菜单文字

uchar code selected[2][16]={{"进入【】\x04 "},{"设置【】\x10 \x04 "}}; // 选框

uchar code secrets_menu[4][6]={"开锁","更改","初始化","退出"}; // 保密菜单中文

uchar code tool_menu[5][6]={"计算器","温度计","闹铃","篮球器","退出"}; // 工具菜单中文

uchar code char_num[10]={"0123456789"}; // 数字显示代码// 每月天数

uchar code dayofmonth[12]={0x31,0x28,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31}; ucharcodekey_code[]={0xD7,0x7E,0x7D,0x7B,0xBE,0xBD,0xBB,0xDE,0xDD,0xDB,0xB7,0x77,0xEE,0x ED,0xEB,0xE7};

uchar code ksp[4]={0x7F,0xBF,0xDF,0xEF}; // 按键扫描代码

uchar code tool_cal[4][2]={"+ ","- ","* ","/ "}; // 运算符号

uchar code alm_sign[2][2]={"关","开"}; // 闹铃开关

uchar code set_bl_dm[2][3][4]={{"30秒","常开","关闭"},{"模01","模02","模03"}};

uchar code set_mka[3][2][4]={{"图片","文字"},{"解锁","加锁"},{"开启","关闭"}};

uchar code nba_oppo[8][2]={"红","白","蓝","绿","紫","灰","黄","黑"};

uchar code set_menu[6][4]={"背光","显示","菜单","键盘","警报","退出"};

uchar code version[10][14]={ // 版本信息

{"清远职业技术学"},{" 信息科技学院"}, {"08届毕业设计"},

{" —05电子02班"},{"作者:李锦华"},{"指导:李祖明"},

{"版本:LIJH-V1.0"},{" 2008/06/19"},{"谢谢你的使用!"},

{" (ok)\x10"}};

uchar code timer_tips[12][16]={ // 篮球器使用说明

{"使用方法:"},{" (+)(-)与(*)(/)"},{"分别是两方的分数"},

{"加与减,(7)键回退"},{"一秒,(8)键24秒复"},{"位,(9)键暂停与开"},

{"始;暂停状态下:"},{"按两次(OK)键可返"},{"回时钟模式-2界面"},

{",(OK)键返回程序"},{"界面,(./S)键两次"},{"退出程序. \x1f"}};

/*===============================操作导航代码==================================*/ typedef struct // 定义主菜单操作索引

{

uchar shaft_num;

uchar left_num;

uchar right_num;

}menu_index;

typedef struct // 定义导航更改索引

{

uchar lnum;

uchar rnum;

}index;

menu_index code index_m[6]={{3,5,1},{4,0,2},{5,1,3},{0,2,4},{1,3,5},{2,4,0}}; // 菜单导航

index code index_t[6]={{4,1},{0,2},{1,3},{2,4},{3,0}}; // 工具导航

index code index_p[5]={{3,1},{0,2},{1,3},{2,0}}; // 保密导航

index code index_s[6]={{5,1},{0,2},{1,3},{2,4},{3,5},{4,0}}; // 设置导航

index code index_a[7]={{0x81,0x91},{0x83,0x91},{0x85,0x91},{0x89,0x81},

{0x8b,0x81},{0x8d,0x81},{0x8f,0x91}}; // 调整下的坐标

index code index_temp_set[3]={{0x8b,0x81},{0x8b,0x91},{0x8f,0x91}}; // 温度设定下的坐标

index code index_alm[3]={{0x8c,0x81},{0x8e,0x81},{0x8f,0x91}}; // 闹铃更改坐标

index code index_cal[3]={{0x86,0x90},{0x8e,0x80},{0x8e,0x90}}; // 计算器操作坐标

uchar code index_nba[4]={0x93,0x97,0x8b,0x8f}; // 篮球器设置导航

/*=========================菜单图片(宽度x高度=32*24)=============================*/ uchar code menu_pic[6][96]={

{// 调整

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x02,

0x40,0x00,0x00,0x82,0x47,0xFF,0xE1,0xC2,0x47,0xFF,0xF3,0xE2,0x47,0x38,0x68,0x02,

0x46,0xDF,0x68,0x82,0x46,0xDF,0x69,0xC2,0x46,0xDE,0xE8,0x82,0x46,0xDD,0xE8,0x02,

0x46,0xDD,0xE8,0x02,0x47,0x3D,0xE8,0x02,0x47,0xFF,0xE8,0x02,0x47,0xFF,0xE9,0xC2,

0x42,0x00,0x18,0x02,0x41,0xFF,0xF3,0xE2,0x40,0x00,0x01,0xC2,0x40,0x00,0x00,0x82,

0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},

{// 工具

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x00,0x03,0x82,

0x41,0xF0,0x07,0xC2,0x43,0xFF,0xCF,0xE2,0x47,0x3F,0xFE,0x02,0x47,0x3F,0xFE,0x02,

0x43,0xFF,0xCF,0xE2,0x41,0xF0,0x0F,0xC2,0x40,0x00,0x03,0x82,0x40,0x00,0x00,0x02,

0x40,0x00,0x03,0xC2,0x40,0x00,0x03,0xC2,0x41,0x80,0x01,0x82,0x43,0xFF,0xF3,0xC2,

0x47,0xFF,0xFF,0xE2,0x47,0xFF,0xFF,0xE2,0x43,0xFF,0xF3,0xC2,0x41,0x80,0x01,0x82,

0x40,0x00,0x01,0x82,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},

{// 设置

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x43,0x18,0x00,0x02,

0x44,0xA4,0x0E,0x02,0x44,0xA4,0x1F,0x02,0x43,0x24,0x3F,0x02,0x40,0x00,0x7F,0x02,

0x40,0xF0,0xFC,0x02,0x43,0xF9,0xF0,0x02,0x43,0x03,0xE0,0x02,0x46,0x77,0x80,0x02,

0x46,0x7F,0x00,0x02,0x46,0x7E,0x00,0x02,0x46,0x7C,0x00,0x02,0x47,0x3D,0x00,0x02,

0x43,0x1D,0x81,0x22,0x43,0x81,0xB2,0x42,0x41,0xC3,0x4F,0xE2,0x40,0xFE,0x4A,0x42,

0x40,0x3C,0x32,0x42,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},

{// 保密

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0xFC,0x03,0x02,

0x41,0xFE,0x1F,0x02,0x43,0x87,0x03,0x82,0x43,0x03,0x03,0x02,0x43,0x03,0x03,0x02,

0x43,0x03,0x0F,0x02,0x43,0x03,0x03,0x02,0x43,0x03,0x03,0x02,0x47,0xFF,0x83,0x02,

0x47,0xFF,0x83,0x02,0x47,0xCF,0x83,0x02,0x47,0x87,0x83,0x02,0x47,0xCF,0x83,0x02,

0x47,0xCF,0x87,0x82,0x47,0xCF,0x8F,0xC2,0x47,0xCF,0x9C,0xE2,0x47,0xFF,0x8F,0xC2,

0x43,0xFF,0x07,0x82,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},

{// 版本

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x02,

0x40,0x0F,0x00,0x62,0x40,0x1D,0x80,0xF2,0x40,0x38,0x41,0xF2,0x40,0x70,0x23,0xE2,

0x40,0xE2,0x17,0xC2,0x41,0xE4,0x4F,0x82,0x41,0xF0,0x9F,0x02,0x41,0x59,0x16,0x02,

0x42,0x4C,0x1D,0x02,0x42,0x46,0x20,0x82,0x42,0x47,0x00,0x42,0x44,0x43,0x80,0xC2,

0x44,0x44,0xC1,0xC2,0x44,0xC8,0x63,0x82,0x45,0x50,0x37,0x02,0x46,0x60,0x1E,0x02,

0x40,0x40,0x0C,0x02,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00},

{// 退出

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x02,0x40,0x40,0xFF,0xE2,

0x40,0x60,0x80,0x62,0x43,0xF0,0x80,0xA2,0x43,0xF0,0x81,0x22,0x40,0x60,0x82,0x22,

0x40,0x40,0x84,0x22,0x40,0x00,0x88,0x22,0x40,0x00,0x88,0x22,0x47,0xFF,0xF8,0x22,

0x47,0xFF,0xF8,0x22,0x46,0x2A,0x2A,0x22,0x46,0xE3,0x78,0x22,0x46,0x77,0x78,0x22,

0x46,0xE3,0x78,0x62,0x46,0x2A,0x38,0x82,0x47,0xFF,0xF9,0x02,0x47,0xFF,0xFA,0x02,

0x40,0x00,0x0C,0x02,0x40,0x00,0x00,0x02,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,}};

/*================显示模式2数字及温度符号图片(宽度x高度=16*32)=====================*/ uchar code mode_2num[11][64]={

{// 图片数字0

0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x40,0x02,0x00,0x00,

0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},

{// 图片数字1

0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,

0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x20,

0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,

0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},

{// 图片数字2

0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,

0x5F,0xF8,0x60,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,

0x70,0x00,0x70,0x00,0x70,0x00,0x6F,0xF8,0x5F,0xFC,0x3F,0xFE,0x00,0x00,0x00,0x00},

{// 图片数字3

0x00,0x00,0x7F,0xFC,0x3F,0xFA,0x1F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,

0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},

{// 图片数字4

0x00,0x00,0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,

0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},

{// 图片数字5

0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,

0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,

0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},

{// 图片数字6

0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,

0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,

0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},

{// 图片数字7

0x00,0x00,0x7F,0xFC,0x3F,0xFA,0x1F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,

0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},

{// 图片数字8

0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,

0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},

{// 图片数字9

0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,

0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,

0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,

0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},

{// 温度符号

0x00,0x00,0x00,0x00,0x70,0xE0,0x53,0xF0,0x77,0xFA,0x0E,0x0E,0x0C,0x06,0x18,0x06,

0x18,0x02,0x38,0x02,0x30,0x00,0x30,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,

0x60,0x00,0x60,0x00,0x70,0x00,0x30,0x00,0x30,0x00,0x38,0x00,0x18,0x02,0x18,0x02,

0x0C,0x06,0x0E,0x06,0x07,0x0E,0x03,0xFA,0x00,0xF0,0x00,0x60,0x00,0x00,0x00,0x00}}

/*=====================显示模式3数字图片(宽度x高度=24*32)=========================*/ uchar code mode_3num[10][96]={

{// 图片数字0

0x00,0x7E,0x00,0x01,0xE7,0x80,0x03,0xC3,0xC0,0x07,0x81,0xE0,0x0F,0x80,0xF0,0x0F,

0x00,0xF0,0x1F,0x00,0xF8,0x1E,0x00,0xF8,0x3E,0x00,0x78,0x3E,0x00,0x7C,0x3E,0x00,

0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,

0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,

0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x78,0x1E,0x00,0xF8,0x1F,0x00,0xF8,0x0F,0x00,

0xF0,0x0F,0x81,0xF0,0x07,0x81,0xE0,0x03,0xC3,0xC0,0x01,0xE7,0x80,0x00,0x7E,0x00},

{// 图片数字1

0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x7C,0x00,0x07,0xFC,0x00,0x00,0x3C,0x00,0x00,

0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,

0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,

0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,

0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,

0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3E,0x00,0x00,0x7F,0x00,0x07,0xFF,0xF0},

{// 图片数字2

0x00,0xFF,0x00,0x03,0xC7,0xC0,0x07,0x01,0xE0,0x0E,0x00,0xF0,0x1E,0x00,0xF8,0x1E,

0x00,0xF8,0x3E,0x00,0x78,0x3E,0x00,0x78,0x3F,0x00,0x78,0x3F,0x00,0x78,0x1F,0x00,

0xF8,0x00,0x00,0xF8,0x00,0x00,0xF0,0x00,0x01,0xF0,0x00,0x03,0xE0,0x00,0x03,0xC0,

0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,

0xF0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x07,0x80,0x1C,0x07,0x00,0x1C,0x0E,0x00,

0x38,0x1C,0x00,0x38,0x3C,0x00,0x78,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8},

{// 图片数字3

0x00,0xFE,0x00,0x07,0x87,0x80,0x0F,0x03,0xC0,0x1E,0x01,0xE0,0x1E,0x01,0xF0,0x1E,

0x01,0xF0,0x1F,0x00,0xF0,0x1F,0x00,0xF0,0x1E,0x00,0xF0,0x00,0x00,0xF0,0x00,0x01,

0xF0,0x00,0x01,0xF0,0x00,0x03,0xE0,0x00,0x03,0xC0,0x00,0x0F,0x00,0x00,0xFE,0x00,

0x00,0x07,0x80,0x00,0x01,0xE0,0x00,0x00,0xF0,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,

0x00,0x78,0x00,0x00,0x7C,0x1E,0x00,0x7C,0x3F,0x00,0x7C,0x3F,0x00,0x7C,0x3F,0x00,

0x78,0x3E,0x00,0xF8,0x1E,0x00,0xF0,0x0F,0x01,0xE0,0x07,0x87,0xC0,0x01,0xFF,0x00},

{// 图片数字4

0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x07,0xC0,0x00,0x0F,0xC0,0x00,0x0F,0xC0,0x00,

0x1F,0xC0,0x00,0x3F,0xC0,0x00,0x3F,0xC0,0x00,0x77,0xC0,0x00,0x77,0xC0,0x00,0xE7,

0xC0,0x01,0xC7,0xC0,0x01,0xC7,0xC0,0x03,0x87,0xC0,0x07,0x07,0xC0,0x07,0x07,0xC0,

0x0E,0x07,0xC0,0x1E,0x07,0xC0,0x1C,0x07,0xC0,0x38,0x07,0xC0,0x38,0x07,0xC0,0x7F,

0xFF,0xFE,0x7F,0xFF,0xFE,0x00,0x07,0xC0,0x00,0x07,0xC0,0x00,0x07,0xC0,0x00,0x07,

0xC0,0x00,0x07,0xC0,0x00,0x07,0xC0,0x00,0x07,0xC0,0x00,0x07,0xE0,0x00,0x7F,0xFE},

{// 图片数字5

0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,

0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,

0x00,0x0E,0x7F,0x00,0x0D,0xFF,0xC0,0x0F,0xC3,0xE0,0x1F,0x01,0xF0,0x1E,0x00,0xF8,

0x1E,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,

0x00,0x7C,0x1E,0x00,0x7C,0x3F,0x00,0x7C,0x3F,0x00,0x78,0x3F,0x00,0x78,0x3E,0x00,

0xF8,0x1E,0x00,0xF0,0x1E,0x01,0xF0,0x0E,0x01,0xE0,0x07,0x87,0xC0,0x00,0xFF,0x00},

{// 图片数字6

0x00,0x3F,0xC0,0x00,0xF1,0xE0,0x03,0xC1,0xF0,0x07,0x81,0xF8,0x07,0x01,0xF8,0x0F,

0x00,0xF0,0x1F,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,

0x00,0x3E,0x00,0x00,0x3E,0x3F,0x80,0x3E,0xFF,0xE0,0x3F,0xE3,0xF0,0x3F,0x80,0xF8,

0x3F,0x00,0xF8,0x3F,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x7C,0x3E,0x00,0x3C,0x3E,

0x00,0x3C,0x3E,0x00,0x3C,0x3E,0x00,0x3C,0x3E,0x00,0x7C,0x1E,0x00,0x7C,0x1F,0x00,

0x78,0x0F,0x00,0x78,0x0F,0x80,0xF0,0x07,0xC0,0xE0,0x03,0xE3,0xC0,0x00,0xFF,0x00},

{// 图片数字7

0x1F,0xFF,0xFC,0x1F,0xFF,0xFC,0x1F,0xFF,0xF8,0x1F,0x00,0x38,0x1C,0x00,0x70,0x1C,

0x00,0xE0,0x38,0x00,0xE0,0x38,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,

0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,

0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x7C,0x00,0x00,

0x78,0x00,0x00,0x78,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,

0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x78,0x00},

{// 图片数字8

0x00,0xFF,0x00,0x07,0xC3,0xC0,0x0F,0x00,0xE0,0x1E,0x00,0xF0,0x1E,0x00,0x78,0x3C,

0x00,0x78,0x3C,0x00,0x78,0x3C,0x00,0x7C,0x3E,0x00,0x78,0x3E,0x00,0x78,0x1F,0x00,

0x78,0x1F,0x80,0xF0,0x0F,0xE1,0xE0,0x07,0xFB,0xC0,0x01,0xFF,0x80,0x01,0xFF,0x80,

0x07,0xBF,0xC0,0x0F,0x0F,0xE0,0x1E,0x03,0xF0,0x3E,0x01,0xF8,0x3C,0x00,0xF8,0x3C,

0x00,0x7C,0x7C,0x00,0x7C,0x78,0x00,0x3C,0x78,0x00,0x3C,0x7C,0x00,0x3C,0x3C,0x00,

0x78,0x3C,0x00,0x78,0x1E,0x00,0x70,0x0F,0x00,0xE0,0x07,0xC3,0xC0,0x01,0xFF,0x00},

{// 图片数字9

0x01,0xFE,0x00,0x07,0xC7,0x80,0x0F,0x01,0xE0,0x1E,0x01,0xE0,0x1E,0x00,0xF0,0x3E,

0x00,0xF8,0x3C,0x00,0x78,0x3C,0x00,0x78,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,

0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x3C,0x00,0xFC,0x3E,0x00,0xFC,0x3E,0x01,0xFC,

0x1F,0x03,0xFC,0x1F,0x8F,0xFC,0x0F,0xFF,0x7C,0x03,0xFC,0x7C,0x00,0x00,0x7C,0x00,

0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0xF0,0x00,0x01,0xF0,0x0F,0x01,

0xE0,0x1F,0x01,0xE0,0x1F,0x03,0xC0,0x1F,0x07,0x80,0x0F,0x9F,0x00,0x03,0xFC,0x00}};

/*========================标记及点图片(宽度x高度=16*16)===========================*/ uchar code running[7][32]={

{// 警报标记16*16

0x00,0x00,0x00,0x39,0x00,0x7B,0x00,0xFE,0x01,0xDC,0x0F,0x98,0x0F,0x18,0x0C,0x1F,

0x0C,0x1F,0x0F,0x18,0x0F,0x98,0x01,0xDC,0x00,0xFE,0x00,0x7B,0x00,0x39,0x00,0x00,},

{// 闹铃开启标记16*16

0x00,0x00,0x00,0x40,0x00,0xE0,0x01,0xB0,0x01,0xB0,0x03,0x18,0x03,0x18,0x06,0x0C,

0x0C,0x06,0x0C,0xE6,0x1B,0x1B,0x0C,0x06,0x06,0x0C,0x03,0xF8,0x00,0xE0,0x00,0x00},

{// 键盘锁标记16*16

0x00,0x00,0x01,0xF8,0x03,0xFC,0x03,0x0C,0x03,0x0C,0x03,0x0C,0x03,0xFC,0x06,0x96,

0x0E,0xA7,0x0E,0xC7,0x0E,0xA7,0x0E,0x97,0x07,0xFE,0x03,0xFC,0x01,0xF8,0x00,0x00,},

{// 温度计标记16*16

0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,

0x01,0x90,0x01,0x98,0x01,0x9C,0x01,0x9E,0x01,0x9C,0x00,0x18,0x00,0x10,0x00,0x00},

{// 模式3点16*16

0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,

0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

{// 模式2点16*16

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,

0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

{// 篮球器运行标记16*16

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x90,

0x01,0x98,0x01,0x9C,0x01,0x9E,0x01,0x9C,0x01,0x98,0x01,0x90,0x00,0x00,0x00,0x00}};

/*========================菜单按钮图片(宽度x高度=16*8)============================*/ uchar code menu_key[]=

{//菜单按钮

0x7F,0xFE,0x81,0x81,0x83,0xC1,0x87,0xE1,0x8F,0xF1,0x9F,0xF9,0x80,0x01,0x7F,0xFE};

/*============================================================================= 函数名称:定时器中断处理与初始化,延时

功能描述:时钟更新、篮球器计时

全局变量:time_tick、time_tick1、resu[2]、resu[3]、resu[4]、temp_delay、temp_min

参数说明:无

返回说明:t0_isr(中断标记)、b20time(温度更新标记)

设计人:LIJH

版本:1.0

说明:

=============================================================================*/ /*延时(一次10个机器周期不等)参数格式:延时数*/

void delay(unsigned int det)

{

while(det--);

}

/*1s延时*/

void delay_pw()

{

delay(60000);

delay(60000);

}

/*6个周期6us */

void delay_b20(uchar n)

{

while(n--);

}

/************主时钟中断处理*********/

void time0_isr(void) interrupt TF0_VECTOR using 1

{

TR0=0;

TL0=(time_count&0x00FF);

TH0=(time_count>>8);

TR0=1;

if(--time_tick) return;

time_tick=20;

t0_isr=1;

if(nba_tim&!oth_run) // 当在篮球器界面时nba_tim==1、oth_run==0 {

if(resu[3]==0)

{

resu[3]=59;

if(resu[2]>0) resu[2]--;

}

else resu[3]--;

if(resu[2]==0&resu[3]==0) // 比赛时间到后停止

{

TR0=0;TR1=0;EA=0;

}

return;

}

if((++temp_min)==60) // 实现温度的更新

{

temp_min=0;

temp_delay--;

if(temp_delay==0)

{

b20time=1;temp_delay=5;

}

}

}

/*************24时钟中断处理**********/

void time1_isr(void) interrupt TF1_VECTOR using 2

{

TR1=0;

TL1=(time_count&0x00FF);

TH1=(time_count>>8);

TR1=1;

if(--time_tick1) return;

time_tick1=20;

if(resu[4]>0)resu[4]--; // 篮球器24秒中断

t0_isr=1;

if(resu[4]==0)

{ TR0=0;TR1=0;EA=0;}

}

/****************定时器初始化***********/

void time_init()

{

EA=0;

TR0=0;

TR1=0;

TMOD=0x11;

TL0=(time_count&0x00FF);

TH0=(time_count>>8);

TL1=(time_count&0x00FF);

TH1=(time_count>>8);

IE=0;

ET0=1;

ET1=1;

}

/*============================================================================= 函数名称:LCD驱动

功能描述:基本驱动(写1个字节、清屏、初始化)

全局变量:无

参数说明:dat_comm(0:命令1:数据),content(数值)

返回说明:无返回值

设计人:LIJH

版本:1.0

说明:

=============================================================================*/ /******************************************检查忙碌位*******************************************/

void chk_busy (void)

{

lcd_data = 0xff;

lcd_rs = 0; // 命令

lcd_rw = 1; // 读

lcd_e = 1;

while(busy==1);

lcd_e = 0;

}

/*********************写LCD 参数格式:0:命令,1:数值,数据*****************************/

void wr_lcd (uchar dat_comm,uchar content)

{

chk_busy ();

lcd_rs=dat_comm;

lcd_rw = 0; // 写

lcd_data=content; // 输出数据或命令

lcd_e=1;

lcd_e=0;

}

/*****************************清绘图*****************************/

void clrgdram(void)

{

uchar i,j;

for(j=0;j<32;j++)

{

wr_lcd(comm,0x34);

wr_lcd(comm,0x80+j);

wr_lcd(comm,0x80);

wr_lcd(comm,0x30);

for(i=0;i<32;i++)

wr_lcd(dat,0x00); // 写入0x00

}

wr_lcd(comm,0x36);

}

/**************************清除显示*************************/

void clear_dis(void)

{

wr_lcd(comm,0x30);

wr_lcd(comm,0x01); // 清屏,地址指针指向00H

clrgdram(); // 请绘图RAM

}

/*************************开机LCD初始化******************/

void init_lcd (void)

{

lcd_rst=1;

wr_lcd(comm,0x30); // 30---基本指令动作

wr_lcd(comm,0x06); // 光标的移动方向

wr_lcd(comm,0x0c); // 开显示,关游标

clear_dis();

}

/*=============================================================================* 函数名称:DS1302驱动

功能描述:基本驱动(读写数据、读写日期,时间、初始化)

全局变量:无

参数说明:w_adder(写地址),r_adder(读地址),w_data(写入数据)

返回说明:返回读取的数据

设计人:LIJH

版本:1.0

说明:上升沿写入数值,下降沿读出数值,没用设立后背电池充电

=============================================================================*/ /**********************向1302写数据参数格式:地址,数据********************/

void w1302(uchar w_adder,uchar w_data)

{

uchar d;

ret_ds1302();

for(d=0;d<16;d++)

{

if(d==8) w_adder=w_data;

d02_data=(bit)(w_adder&0x01);

d02_sclk=0; // 上升沿

w_adder>>=1;

d02_sclk=1;

}

end_ds1302();

}

/******************接收1302一个字节的数据参数格式:读地址*******************/

uchar r1302(uchar r_adder)

{

uchar d=0;

ret_ds1302();

for(d=0;d<8;d++) // 写地址

{

d02_data=(bit)(r_adder&0x01);

d02_sclk=0;

r_adder>>=1;

d02_sclk=1;

}

r_adder=0;

for(d=0;d<8;d++) // 读数据

{

d02_data=1;

d02_sclk=1; // 下降沿

r_adder>>=1;

d02_sclk=0;

if(d02_data) r_adder|=0x80;

}

end_ds1302();

return(r_adder);

}

/*******************写入时间与日期************************/

void wds1302_time_date(void)

{

w1302(d02_wrc,0x00); // 写允许

w1302(0x90,0xa5); // 单二极管2K电阻充电

w1302(d02_year,today.year); // 年

w1302(d02_weeks,today.week); // 星期

w1302(d02_month,today.month); // 月

w1302(d02_day,today.day); // 日

w1302(d02_hour,0x7f&now.hour); // 时

w1302(d02_minute,now.minute); // 分

w1302(d02_second,0x7f&now.second); // 秒

w1302(d02_wrc,0x80); // 写禁止

}

/************************初始化写DS1302 RAM**********************/

void init_wds1302_ram(void)

{

w1302(d02_wrc,0x00);

w1302(0x90,0xa5); // 单二极管2K电阻充电

w1302(d02_signs,0x00); // 状态寄存

w1302(d02_passw,0x74); // 密码储存首位

w1302(d02_passw+2,0x14); // 初始值为:741456

w1302(d02_passw+4,0x56); // 密码最后一位

w1302(d02_alm,0x12); // 闹铃时(12小时)

w1302(d02_alm+2,0x00); // 闹铃分(0分)

w1302(d02_temp,0xff); // 温度上限(255为关闭)

w1302(d02_temp+2,0xff); // 温度下限(关闭)

w1302(d02_initsi,0xb4); // 是否要初始化标记(0xb4为已经初始化)

w1302(d02_wrc,0x80);

}

/*******************写DS1302一字节的RAM***********************/

void wds1302_data(uchar adder,uchar _data)

{

w1302(d02_wrc,0x00);

w1302(adder,_data);

w1302(d02_wrc,0x80);

}

/**************************读取日期***************/

void rds1302_date(void)

{

today.year=r1302(d02_year+1);

today.week=r1302(d02_weeks+1);

today.month=r1302(d02_month+1);

today.day=r1302(d02_day+1);

}

/*****************读取时间*****************/

void rds1302_time(void)

{

now.hour=(r1302(d02_hour+1));

now.minute=r1302(d02_minute+1);

now.second=r1302(d02_second+1);

if(now.hour==alarm_time[0]&&now.minute==alarm_time[1]) alm_run=1;

else // 闹铃时间比较

{

alm_run=0;buzstop=0;buzzer=close;

}

}

/**********************开机读数据*******************/

void rds1302_data(void)

{

signs=r1302(d02_signs+1);

alarm_time[0]=r1302(d02_alm+1);

alarm_time[1]=r1302(d02_alm+3);

als_temp[0]=r1302(d02_temp+1);

als_temp[1]=r1302(d02_temp+3);

}

/***************************DS1302初始化**********************/

void init_ds1302(void)

{

wds1302_time_date();

init_wds1302_ram();

}

/*=============================================================================* 函数名称:DS18b20驱动

功能描述:基本驱动(读写数据、数据转换、初始化)

全局变量:无

参数说明:无

返回说明:返回读取的数据

设计人:LIJH

版本:1.0

说明:调试中。。。

=============================================================================*/ /*****************18B20初始化**********************/

void init_ds18b20()

{

b20_io=1;

b20_io=0;

delay_b20(120); // 延时≥480us

b20_io=1;

delay_b20(12); // 拉高为高电平后在15—60us出现低电平,并维持60—240us

ds18b20=~b20_io;

delay_b20(40);

}

/******************向18B20发送一个字节****************/

void send18b20_byte(uchar data_send)

{

uchar d=0;

for (d=0;d<8;d++)

{

b20_io=0; // 拉低电平后向总线写入一个位,15us后18B20接收

b20_io=data_send&0x01;

delay_b20(10); // 延时60us后完成一次

b20_io=1;

data_send>>=1; // 下位开始

}

}

/**********************从18B20读出温度值12位分辨率********************/

void receive18b20(void)

{

uchar n=1,d;

for (d=0;d<16;d++)

{

if(d==8) n=0;

b20_io=0; // 拉低总线

temp.t_data[n]>>=1;

b20_io=1; // 拉高总线

if(b20_io) // 读入总线数值

temp.t_data[n]|=0x80;

delay_b20(10); // 等待60us

}

}

/*************************数据转化************************/

void conversion_t(void)

{

uchar save=0,save1=0;

if(temp.temp_data<0) // 判断数值符号

{temp_pn=1;temp.temp_data=~temp.temp_data+1;}

else temp_pn=0;

if(temp.t_data[1]&0x01==1) save+=6; // 小数点后的值转变

if((temp.t_data[1]>>1)&0x01==1) save+=12;

if((temp.t_data[1]>>2)&0x01==1) save+=25;

if((temp.t_data[1]>>3)&0x01==1) save+=50;

temp.temp_data>>=4;

save1=temp.temp_data&0x00ff; // 整数部分数值

temp.t_data[0]=save1;

temp.t_data[1]=save;

thl_als=1;

if(save1>=(als_temp[0]&0x7f)) // 温度比较

{

if(!temp_pn||(temp_pn&(als_temp[0]&0x80)!=0)){ als_th=open;als_tl=close;}

}

else if(save1<(als_temp[1]&0x7f)&&als_temp[1]!=255)

{

if(!temp_pn||(temp_pn&(als_temp[1]&0x80)!=0)) {als_tl=open;als_th=close;}

}

else {als_th=als_tl=close;thl_als=0;buzstop=0;buzzer=close;}

}

/********************18b20功能*******************/

void ds18b20_func(void)

{

EA=0;

TR0=0;

temp.temp_data=0;

init_ds18b20();

send18b20_byte(0xcc); // 跳过ROM

send18b20_byte(0x44); // 温度转换

delay_pw();

init_ds18b20();

send18b20_byte(0xcc);

send18b20_byte(0xbe); // 读RAM

receive18b20(); // 读取温度值

conversion_t(); // 数值转换

EA=1;

TR0=1;

}

/*============================================================================= 函数名称:画面构造

功能描述:界面1、2、3,图片菜单,反白,标头,16*16(32)图片

全局变量:无

参数说明:函数说明

返回说明:无

设计人:LIJH

版本:1.0

说明:X坐标每一格每次16点

=============================================================================*/ /*反白或显示图片参数格式:(H)8bit数据,(L)8bit数据,X0坐标(16bit),Y0坐标(1bit),X坐标(16bit),Y 坐标(1bit)*/

void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)

{

uchar i,j;

for(j=0;j

{

for(i=0;i

{

wr_lcd(comm,0x34); // 扩展功能

wr_lcd(comm,y0+j); // 写Y坐标

wr_lcd(comm,x0+i); // 写X坐标

wr_lcd(comm,0x30); // 普通功能

wr_lcd(dat,data1);

wr_lcd(dat,data2);

}

}

wr_lcd(comm,0x36); // 开绘图显示

}

/*************显示字体参数格式: 显示位置(0x80-0x9f),显示个数,显示内容指针********************/

void display_cnasc(uchar dis_bit,uchar num,uchar *cnasc)

{

wr_lcd(comm,0x30); // 普通功能

wr_lcd(comm,dis_bit); // 写地址

while(num>0)

{

wr_lcd(dat,*(cnasc++));

wr_lcd(dat,*(cnasc++));

num--;

}

}

/****************导航标头显示****************/

void dis_title(void)

{

display_cnasc(0x80,1,"\x15 ");

display_cnasc(0x90,1,"┏");

display_cnasc(0x97,1,"┓");

display_cnasc(0x98,1,"┗");

display_cnasc(0x9f,1,"┛");

display_cnasc(0x92,1,"\x1e ");

display_cnasc(0x9a,1,"\x1f ");

con_disp(0xff,0xff,0x80,0x80,3,16);

con_disp(0xef,0xef,0x83,0x80,1,16);

con_disp(0xde,0xf7,0x84,0x80,1,16);

con_disp(0x76,0xdb,0x85,0x80,1,16);

con_disp(0x55,0x55,0x86,0x80,1,16);

con_disp(0x55,0x55,0x87,0x80,1,16);

}

/*********************图片显示标头*********************/

void dis_title_pic(void)

{

display_cnasc(0x80,2,"〓〓");

display_cnasc(0x86,2,"〓〓");

}

/*****************************功能实现显示标头*****************/

void dis_title_e(void)

{

display_cnasc(0x80,1," \x15");

con_disp(0xff,0xff,0x80,0x80,1,16);

con_disp(0xff,0xc7,0x81,0x80,1,16);

con_disp(0xff,0xff,0x82,0x80,3,16);

con_disp(0xe3,0xff,0x85,0x80,1,16);

con_disp(0xff,0xff,0x86,0x80,2,16);

}

/*******************显示菜单图片格式:图片反显(1)或正常显示(0),显示图片的号码****************/ void anti_nor_pic (uchar cpl_sign,uchar menu_num)

{

uchar i,j,x,y;

x=menu_num*3; // 计算图片显示坐标

if(x>6) x--;

if(menu_num<3) y=16; // 上下半屏显示

else y=8;

if(cpl_sign==1) display_cnasc(0x82,4,menu_cn[menu_num]);

for(j=0;j<24;j++)

{

for(i=0;i<2;i++)

{

wr_lcd(comm,0x34);

wr_lcd(comm,0x80+y);

wr_lcd(comm,0x80+x+i); // 分两次显示16bit

wr_lcd(comm,0x30);

if(cpl_sign==1) // 图片反选

{

wr_lcd(dat,~menu_pic[menu_num][j*4+i*2]);

wr_lcd(dat,~menu_pic[menu_num][j*4+i*2+1]);

}

else // 正常显示

{

wr_lcd(dat,menu_pic[menu_num][j*4+i*2]);

wr_lcd(dat,menu_pic[menu_num][j*4+i*2+1]);

}

}

y++;

if(y==32&&menu_num<3) {x+=8;y=0;} // 上下屏切换

}

wr_lcd(comm,0x36);

}

/*************状态16*16图片格式:反色(1)或正常0,X坐标,Y坐标,状态编码(16*16)*********************/ void dis_run_state(uchar cpl,uchar x0,uchar y0,uchar state_num)

{

uchar j;

for(j=0;j<16;j++)

{

wr_lcd(comm,0x34); // 扩展功能

wr_lcd(comm,y0++); // 写Y地址

wr_lcd(comm,x0); // 写X地址

wr_lcd(comm,0x30); // 普通功能

if(cpl==1) // 写数据

{

wr_lcd(dat,~running[state_num][j*2]);

wr_lcd(dat,~running[state_num][j*2+1]);

}

else

{

wr_lcd(dat,running[state_num][j*2]);

wr_lcd(dat,running[state_num][j*2+1]);

}

}

wr_lcd(comm,0x36);

}

/***************显示菜单按钮参数格式:反色(1)或正常(0)**************************/

void dis_menu_key(uchar d)

{

if(d==1)

{

for(d=0;d<8;d++) // 显示菜单按钮

con_disp(~menu_key[d*2],~menu_key[d*2+1],0x9f,0x97+d,1,1);

}

else

{

for(d=0;d<8;d++) // 显示菜单按钮

con_disp(menu_key[d*2],menu_key[d*2+1],0x9f,0x97+d,1,1);

}

}

/********************显示模式3的界面**********************/

void dis_mode3(void)

{

uchar i,j,h,l,x_0=0x80,y_0=0x90;

h=now.hour>>4; // 分离十位个位

l=now.hour&0x0f;

for(j=0;j<2;j++)

{

for(i=0;i<32;i++) // 十位个位一起读入

{

wr_lcd(comm,0x34);

wr_lcd(comm,y_0++);

wr_lcd(comm,x_0);

wr_lcd(comm,0x30);

wr_lcd(dat,mode_3num[h][i*3]); // 连续写数据,X坐标自动加1

wr_lcd(dat,mode_3num[h][i*3+1]);

wr_lcd(dat,mode_3num[h][i*3+2]);

wr_lcd(dat,mode_3num[l][i*3]);

wr_lcd(dat,mode_3num[l][i*3+1]);

wr_lcd(dat,mode_3num[l][i*3+2]);

if(y_0==0xa0){x_0=x_0+8;y_0=0x80;}

}

x_0=0x84,y_0=0x90;

h=now.minute>>4; // 分离十位个位

l=now.minute&0x0f;

dis_run_state(0,0x83,0x90,4); // 显示点

dis_run_state(0,0x8b,0x80,4);

y_0=0x80; // 显示状态标记

if(keb) {dis_run_state(0,0x87,y_0,2);y_0+=16;}

if(alm) {dis_run_state(0,0x87,y_0,1);y_0+=16;}

if(y_0<0xa0&&!als){dis_run_state(0,0x87,y_0,0);}

if(y_0==0xa0&&!als){dis_run_state(0,0x8f,0x80,0);}

dis_menu_key(0);

}

/**********************显示模式1和2的共用部分*****************/

void mode1_2_union(void)

{

uchar x=0x9b;

display_cnasc(0x98,2,"星期");

if(nba_tim) dis_run_state(0,x,0x90,6);

if(keb) {dis_run_state(0,x,0x90,2);x++;} // 显示标记

if(alm) {dis_run_state(0,x,0x90,1);x++;}

if(!als){dis_run_state(0,x,0x90,0);}

dis_menu_key(0); // 显示菜单按钮

}

/*******************显示模式2的日期**********************/

void dis_date_mode2(uchar d)

{

uchar save[2];

display_cnasc(d+2,1,"年");

display_cnasc(d+4,1,"月");

display_cnasc(d+6,1,"日");

display_cnasc(0x9a,1,weeks[today.week]); // 显示星期

save[0]=char_num[today.year>>4]; // 将显示的数值存到数组中save[1]=char_num[today.year&0x0f];

display_cnasc(d+1,1,save);

save[0]=char_num[today.month>>4];

save[1]=char_num[today.month&0x0f];

display_cnasc(d+3,1,save);

save[0]=char_num[today.day>>4];

save[1]=char_num[today.day&0x0f];

display_cnasc(d+5,1,save);

}

/*****************显示模式2的时间数字显示16*32******************/

void num2_asc_dis(uchar num,uchar x_0)

{

uchar i,y_0=0x90;

for(i=0;i<32;i++) // 十位个位一起读入

{

wr_lcd(comm,0x36);

wr_lcd(comm,y_0++);

wr_lcd(comm,x_0);

wr_lcd(comm,0x30);

wr_lcd(dat,mode_2num[num][i*2]);

wr_lcd(dat,mode_2num[num][i*2+1]);

if(i==15){x_0+=8;y_0=0x80;}

}

wr_lcd(comm,0x36);

}

/****************显示模式2的时间*******************/

void dis_time_mode2(void)

{

uchar h,l;

if(now.hour!=save_time.hour||init_d2)

{

h=now.hour>>4; // 分离十位个位

l=now.hour&0x0f;

num2_asc_dis(h,0x80);

num2_asc_dis(l,0x80+1);

if(now.minute!=save_time.minute||init_d2)

{

h=now.minute>>4; // 分离十位个位

l=now.minute&0x0f;

num2_asc_dis(h,0x83);

num2_asc_dis(l,0x83+1);

}

if(now.second!=save_time.second||init_d2)

{

h=now.second>>4; // 分离十位个位

l=now.second&0x0f;

num2_asc_dis(h,0x86);

num2_asc_dis(l,0x86+1);

}

if(init_d2)

{

dis_run_state(0,0x82,0x90,5); // 显示点

dis_run_state(0,0x8a,0x80,5);

dis_run_state(0,0x85,0x90,5); // 显示点

dis_run_state(0,0x8d,0x80,5);

}

}

/*********************显示模式2的界面*********************/ void dis_mode2(void)

{

dis_date_mode2(0x81); // 显示日期

display_cnasc(0x81,1,"20");

dis_time_mode2(); // 显示时间

mode1_2_union();

}

/*********************显示模式1的日期*****************/ void dis_date_mode1(void)

{

uchar save[2];

display_cnasc(0x80,3,"日期:");

display_cnasc(0x90,3,"时间:");

display_cnasc(0x88,3,"温度:");

display_cnasc(0x9a,1,weeks[today.week]); // 显示星期display_cnasc(0x83,1,"20");

save[0]=char_num[today.year>>4];

save[1]=char_num[today.year&0x0f];

display_cnasc(0x84,1,save);

save[0]='/';

save[1]=char_num[today.month>>4];

display_cnasc(0x85,1,save);

save[0]=char_num[today.month&0x0f];

save[1]='/';

display_cnasc(0x86,1,save);

save[0]=char_num[today.day>>4];

save[1]=char_num[today.day&0x0f];

display_cnasc(0x87,1,save);

mode1_2_union();

}

/*********************显示模式1的时间*****************/ void dis_time_mode1(void)

{

uchar save[2];

save[0]=char_num[now.hour>>4];

save[1]=char_num[now.hour&0x0f];

display_cnasc(0x93,1,save);

save[0]=':';

save[1]=char_num[now.minute>>4];

display_cnasc(0x94,1,save);

save[0]=char_num[now.minute&0x0f];

save[1]=':';

display_cnasc(0x95,1,save);

save[0]=char_num[now.second>>4];

save[1]=char_num[now.second&0x0f];

display_cnasc(0x96,1,save);

}

/*************************显示模式1的温度********************/ void dis_temp_mode1(void)

{

uchar save[2];

if(ds18b20)

{

if(temp.t_data[0]>99)

{

save[0]=char_num[temp.t_data[0]/100];

save[1]=char_num[(temp.t_data[0]/10)%10];

display_cnasc(0x8b,1,save);

save[0]=char_num[temp.t_data[0]%10];

save[1]='.';

display_cnasc(0x8c,1,save);

save[0]=char_num[temp.t_data[1]/10];

save[1]=' ';

display_cnasc(0x8d,1,save);

display_cnasc(0x8e,1,"℃");

}

else

{

if(temp_pn) display_cnasc(0x8a,1,":-");

else display_cnasc(0x8a,1,":");

save[0]=char_num[temp.t_data[0]/10];

save[1]=char_num[temp.t_data[0]%10];

display_cnasc(0x8b,1,save);

save[0]='.';

save[1]=char_num[temp.t_data[1]/10];

display_cnasc(0x8c,1,save);

display_cnasc(0x8d,1,"℃");

}

}

else display_cnasc(0x8b,3,"FF.F℃");

}

/********************显示模式1的界面*****************/

void dis_mode1(void)

{

dis_date_mode1();

dis_time_mode1();

dis_temp_mode1();

}

/******************篮球器时间显示*****************/

void nba_dis_time(void)

{

uchar d,dis[2];

for(d=2;d<4;d++)

{

dis[0]=char_num[resu[d]/10];

dis[1]=char_num[resu[d]%10];

display_cnasc(0x81+d*2,1,dis);

}

display_cnasc(0x86,1,": ");

if(resu[0]==1)

{

dis[0]='\x07';

dis[1]=char_num[resu[4]/10];

display_cnasc(0x93,1,dis);

dis[1]='\x07';

dis[0]=char_num[resu[4]%10];

display_cnasc(0x94,1,dis);

}

}

/*============================================================================= 函数名称:键盘扫描

功能描述:读取键盘操作数据及部分状态的实现

全局变量:dis_sig t0_isr temprun b20time alm_run als_temp buzstop als

lock_op nba_tim

参数说明:无

返回说明:键盘锁与密码锁时间到达后返回255

设计人:LIJH

版本:1.0

说明:

=============================================================================*/ /******************扫描键盘*******************/

uchar keypad_scan()

{

uchar key,dis[2];

keyboard=0xf0;

while (keyboard==0xf0) // 等待按键按下

{

/*--------------------- 背光灯关闭延时-----------------------*/

delay(1000);

if((++dis[0])==0&&bl_delay!=0) bl_delay--; // 当有按键按下bl_delay重新赋值

if(bl_delay==0&&!bl0) lcd_bl=close; // 背光时间到且不是常开模式时关闭背光

/*----------------------- 键盘锁延时-------------------------*/

if(keb&&dis_sig&&bl_delay==0&&resu[11]<2) resu[11]++; // 当有按键按下j清零

if(bl_delay==0) bl_delay=15;

/*--------------------- 密码锁30秒锁延时---------------------*/

if(lock_op)

{

if((++i)==0) save1++;

if(save1==15) return(255);

}

/*---------------------- 时钟界面时间显示---------------------*/

if(dis_sig&&t0_isr||nba_tim&&oth_run) // 正常时钟界面与篮球器返回时钟界面显示

{

rds1302_date(); // 读出日期

rds1302_time(); // 读出时间

if(di0) // 模式2

{

dis_time_mode2();

if(now.hour==0&&now.minute==0&&now.second==0) dis_date_mode2(0x81);

}

else if(di1) // 模式3

{

if(now.hour!=save_time.hour||now.minute!=save_time.minute) // 时,分变化后显示

dis_mode3();

}

else

{

dis_time_mode1(); // 模式1

if(now.hour==0&&now.minute==0&&now.second==0) dis_date_mode1();

}

save_time=now; // 重新记录作下次比较

t0_isr=0;

}

/*-------------------- 温度计提示按键操作----------------------*/

if(temprun)

{

if(!oth_run)

{

display_cnasc(0x96,2," key"); // 温度计时提示按键操作

for(dis[1]=0;dis[1]<250;dis[1]++)

{

delay(1000);

if(keyboard!=0xf0)

{

keyboard=0x7f;

if(keyboard==0x7d) return 0x7d;

else keyboard=0xf0;

}

}

oth_run=1;

display_cnasc(0x96,2," ");

}

}

/*------------------------ 蜂鸣器警报--------------------------*/

if(((alm_run&&alm)||thl_als)&&!buzstop) // 温度,闹铃蜂鸣器警报

{ // 有按键按下时停止

if(now.second==0) lcd_bl=close;

delay(15000); // 读出温度时间比较

if(keyboard!=0xf0) break;

delay(15000);

if(keyboard!=0xf0) break;

delay(15000);

if(keyboard!=0xf0) break;

delay(15000);

if(alm_run) lcd_bl=!lcd_bl; // 只在闹铃功能闪

if(!als)buzzer=!buzzer; // 警报开启后蜂鸣器开启

}

/*----------------------- 温度刷新显示-------------------------*/

if((temprun&&oth_run)||(b20time&&!di0&&!di1&&dis_sig)) // 温度计功能于模式1界面{

ds18b20_func(); // 温度检测功能

oth_run=0; // 作交替标记用

if(temprun) return 20; // 温度计开启后返回

if(b20time){ dis_temp_mode1();b20time=0;} // 时钟界面5分钟更新一次,T0计时

}

/*------------------------ 篮球器显示时间------------------------*/

if(nba_tim&!oth_run) // 当篮球器模式下oth_run==0为篮球器计时状态

{

if(EA) display_cnasc(0x8b,2," R\x10 "); // 显示运行状态

else display_cnasc(0x8b,2," S! ");

if(t0_isr)

{ // 更新时间

nba_dis_time();

if(resu[2]==0&&resu[3]==0) // 判断比赛情况

{

resu[6]++;

if(resu[6]

else display_cnasc(0x85,3,"完结");

}

if(resu[4]==0||(resu[2]==0&&resu[3]==0)) // 时间到达警报

{

buzzer=open;

delay_pw();

if(resu[2]==0&&resu[3]==0) // 24秒总时间警报

{

delay_pw();

}

buzzer=close;

if(resu[4]==0) resu[4]=24; // 重新赋值

}

t0_isr=0; // 清零等下次中断产生

}

}

}

/*===== 以上等待按键=====*/

/*------------------------- 按键按下后--------------------------*/

delay(8000); // 消抖振

if(!lock_op)bl_delay=15; // 背光时间赋值

if(bl1) lcd_bl=close; // 不在背光灯关闭时亮起

else lcd_bl=open;

if(alm_run|thl_als) {buzstop=1;buzzer=close;}

if(keb&&dis_sig)

{

if(resu[11]==2) return 255; // 要求输入密码

else resu[11]=0; // 时间不到时重新计时

}

do

{

for(dis[0]=0;dis[0]<=3;dis[0]++)

{

keyboard=ksp[dis[0]];

if(keyboard!=ksp[dis[0]])

{

key=keyboard;

if(key!=ksp[dis[0]]) return(key);

}

}

}while(1);

}

/**************读键盘数据*****************/

uchar gotkey()

{

uchar save,n;

keyboard=0xf0;

while(keyboard!=0xf0); // 等待键盘松开

delay(5000); // 消抖阵

if(adju_si) // 连写输入

{

adju_si=0;

for(n=0;n<60;n++)

{

delay(2000);

if(keyboard!=0xf0)

{

adju_si=1; // 在更改时,在此时间内可连成多位数

break;

}

}

}

save=keypad_scan(); // 扫描键盘

if(save==255) return 255; // 要求输入键盘锁密码或延时时间到达

for (n=0;n<16;n++)

{

if(save==key_code[n])

return(n);

}

return(20);

}

/*=========================================================================== 函数名称:导航

功能描述:主菜单工具导航保存提示

全局变量:无

参数说明:

返回说明:无

设计人:LIJH

版本:1.0

带字库12864液晶详解

12864液晶 一、概述 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: l 低电源电压(VDD:+3.0--+5.5V) l 显示分辨率:128×64点 l 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) l 内置 128个16×8点阵字符 l 2MHZ时钟频率 l 显示方式:STN、半透、正显 l 驱动方式:1/32DUTY,1/5BIAS l 视角方向:6点 l 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 l 通讯方式:串行、并口可选 l 内置DC-DC转换电路,无需外加负压 l 无需片选信号,简化软件设计 l 工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明

*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口 管脚号管脚名称电平管脚功能描述 1 VSS 0V 电源地 2 VCC 3.0+5V 电源正 3 V0 - 对比度(亮度)调整 RS=“H”,表示DB7——DB0为显示数据 4 RS(CS)H/L RS=“L”,表示DB7——DB0为显示指令数据 R/W=“H”,E=“H”,数据被读到DB7——DB0 5 R/W(SID) H/L R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR 6 E(SCLK) H/L 使能信号 7 DB0 H/L 三态数据线 8 DB1 H/L 三态数据线 9 DB2 H/L 三态数据线 10 DB3 H/L 三态数据线 11 DB4 H/L 三态数据线 12 DB5 H/L 三态数据线 13 DB6 H/L 三态数据线 14 DB7 H/L 三态数据线 15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1) 16 NC - 空脚 17 /RESET H/L 复位端,低电平有效(见注释2) 18 VOUT - LCD驱动电压输出端 19 A VDD 背光源正端(+5V)(见注释3) 20 K VSS 背光源负端(见注释3)

LCD12864中文资料

12864LCD液晶显示屏中文资料 一、概述 二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 三、基本特性: (1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明: *注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口

12864液晶资料

一、液晶显示模块概述 12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。主要技术参数和显示特性: 电源:VDD 3.3V~+5V(内置升压电路,无需负压); 显示内容:128列× 64行(128表示点数) 显示颜色:黄绿 显示角度:6:00钟直视 LCD类型:STN 与MCU接口:8位或4位并行/3位串行 配置LED背光 多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 二、外形尺寸 1.外形尺寸图 2.主要外形尺寸

二、模块引脚说明 逻辑工作电压(VDD):4.5~5.5V 电源地(GND):0V 工作温度(Ta):0~60℃(常温) / -20~75℃(宽温) 三、接口时序 模块有并行和串行两种连接方法(时序如下): 8位并行连接时序图 MPU写资料到模块

MPU从模块读出资料 2、串行连接时序图

串行数据传送共分三个字节完成: 第一字节:串口控制—格式 11111ABC A 为数据传送方向控制:H 表示数据从LCD 到MCU ,L 表示数据从MCU 到LCD B 为数据类型选择:H 表示数据是显示数据,L 表示数据是控制指令 C 固定为0 第二字节:(并行)8位数据的高4位—格式 DDDD0000 第三字节:(并行)8位数据的低4位—格式 0000DDDD 串行接口时序参数:(测试条件:T=25℃ VDD=4.5V)

备注: 1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF 标志时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,(一般在输入每天指令前加个delay )那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 2、“RE ”为基本指令集与扩充指令集的选择控制位元,当变更“RE ”位元后,往后的指令集将维持在最后的状态,除非再次变更“ RE ”位元,否则使用相同指令集时,不需每次重设“RE ”位元。 具体指令介绍: 1、清除显示 CODE : 功能:清除显示屏幕,把DDRAM 位址计数器调整为“00H ” 2、位址归位 CODE : 功能:把DDRAM 位址计数器调整为“00H ”,游标回原点,该功能不影响显示DDRAM 3、位址归位 CODE : 功能:把DDRAM 位址计数器调整为“00H ”,游标回原点,该功能不影响显示DDRAM 功能:执行该命令

12864液晶使用手册

12864液晶屏学习手册 一、液晶显示模块概述 12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。主要技术参数和显示特性: 电源:VDD 3.3V~+5V(内置升压电路,无需负压); 显示内容:128列× 64行(128表示点数) 显示颜色:黄绿 显示角度:6:00钟直视 LCD类型:STN 与MCU接口:8位或4位并行/3位串行 配置LED背光 多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 二、外形尺寸 1.外形尺寸图 2.主要外形尺寸

二、模块引脚说明 逻辑工作电压(VDD):4.5~5.5V 电源地(GND):0V 工作温度(Ta):0~60℃(常温) / -20~75℃(宽温) 三、接口时序 模块有并行和串行两种连接方法(时序如下): 8位并行连接时序图 MPU写资料到模块

MPU从模块读出资料 2、串行连接时序图

串行数据传送共分三个字节完成: 第一字节:串口控制—格式11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0 第二字节:(并行)8位数据的高4位—格式DDDD0000 第三字节:(并行)8位数据的低4位—格式0000DDDD 串行接口时序参数:(测试条件:T=25℃VDD=4.5V)

备注: 1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,(一般在输入每天指令前加个delay)那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。 具体指令介绍:

LCD12864液晶显示模块(中文资料)

FYD12864液晶中文显示模块

(一) (一)概述 (3) (二)(二)外形尺寸 1 方框图 (3) 2 外型尺寸图 (4) (三)(三)模块的接口 (4) (四)(四)硬件说明 (5) (五) 指令说明 (7) (五)(五)读写操作时序 (8) (六)(六)交流参数 (11) (七)(七)软件初始化过程 (12) (八)(八)应用举例 (13) (九)(九)附录 1半宽字符表 (20) 2 汉字字符表 (21) 一、概述 FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: ●●低电源电压(VDD:+3.0--+5.5V)

●●显示分辨率:128×64点 ●●内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) ●●内置 128个16×8点阵字符 ●●2MHZ时钟频率 ●●显示方式:STN、半透、正显 ●●驱动方式:1/32DUTY,1/5BIAS ●●视角方向:6点 ●●背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 ●●通讯方式:串行、并口可选 ●●内置DC-DC转换电路,无需外加负压 ●●无需片选信号,简化软件设计 ●●工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 二、方框图 3、外形尺寸图

Lcd12864最全中文资料

128*64LCD液晶显示屏中文资料 一、概述 二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 三、基本特性: (1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明: *注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口

12864液晶中文资料

12864液晶中文资料 一、液晶显示模块概述 JM12864M-2汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。 主要技术参数和显示特性: 电源:VDD 3.3V~+5V(内置升压电路,无需负压); 显示内容:128列× 64行 显示颜色:黄绿 显示角度:6:00钟直视 LCD类型:STN 与MCU接口:8位或4位并行/3位串行 配置LED背光 多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 二、外形尺寸 外观尺寸:93×70×12.5mm 视域尺寸:73×39mm 外形尺寸图 外形尺寸 脚说明 128X64HZ 引脚说明

逻辑工作电压(VDD):4.5~5.5V 电源地(GND):0V 工作温度(Ta):-10℃~60℃(常温) / -20℃~70℃(宽温)

三、接口时序 模块有并行和串行两种连接方法(时序如下): 8位并行连接时序图 MPU写资料到模块 MPU从模块读出资料 2、串行连接时序图 串行数据传送共分三个字节完成: 第一字节:串口控制—格式11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0 第二字节:(并行)8位数据的高4位—格式DDDD0000 第三字节:(并行)8位数据的低4位—格式0000DDDD 串行接口时序参数:(测试条件:T=25℃VDD=4.5V) 四、用户指令集 1、指令表1:(RE=0:基本指令集)

lcd12864c语言编程详解

12864系列点阵型液晶显示模块 使用说明书 一、OCM12864液晶显示模块概述 1.OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU 直接接口,具有8位标准数据总线、6条控制线及电源线。采用KS0107控制IC。 2.外观尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2) 78×70×10mm(ocm12864-3), 3.视域尺寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2), 64×44mm(ocm12864-3) 4.重量:大约g 补充说明:外观尺寸可根据用户的要求进行适度调整。 二、最大工作范围 1、逻辑工作电压(Vcc):4.5~5.5V 2、电源地(GND):0V 3、LCD驱动电压(Vee):0~-10V 4、输入电压:Vee~Vdd 5、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温) 6、保存温度(Tstg):-10~65℃ 三、电气特性(测试条件 Ta=25,Vdd=5.0+/-0.25V) 1、输入高电平(Vih):3.5Vmin 2、输入低电平(Vil):0.55Vmax 3、输出高电平(Voh):3.75Vmin 4、输出低电平(Vol):1.0Vmax 5、工作电流:2.0mAmax 四、接口说明 12864-3A接口说明表

五、指令描述 1、显示开/关设置 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。 2、设置显示起始行 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z 地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。 3、设置页地址 CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。 DD RAM地址映像表 Y 地址 0 1 2 ………………………61 62 63

SG12864-12带汉字库LCD显示器

中文字库液晶显示模块使用 手册 SG12864 深圳市显能实业有限公司 深圳市福田区上梅林越华路12号珠宝城大厦四楼电话:0755-******** 传真:0755-******** http://https://www.360docs.net/doc/67425090.html, E-mail:shine@https://www.360docs.net/doc/67425090.html,

一、液晶显示模块概述 1. 液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文 汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接 口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画 面移位、睡眠模式等。 2. 外观尺寸:93×70×12.5mm 3. 视域尺寸:73×39mm 外形尺寸图 二、模块引脚说明 128X64 引脚说明 引脚名称方向说明引脚名称方向说明 1 VSS - GND(0V) 11 DB4 I 数据4 2 VDD - Supply Voltage For Logic (+5v) 12 DB5 I 数据5 3 VO - Supply Voltage For LCD (+5v) 13 DB6 I 数据6 4 RS (CS) O H: Data L: Instruction Code 14 DB7 I 数据7 5 R/W (SID) O H: Read L: Write 15 PSB O H: Parallel Mode L: Serial Mode 6 E (SCLK) O Enable Signal 16 NC - 空脚 7 DB0 I 数据0 17 /RST O Reset Signal 低电平有效 8 DB1 I 数据1 18 NC - 空脚 9 DB2 I 数据2 19 LEDA - 背光源正极(LED+5V) 10 DB3 I 数据3 20 LEDK - 背光源负极(LED-OV) 外形尺寸 ITEM NOMINAL DIMEN UNIT 模块体积 93×78×12.5 mm 视域 70.7×38.8 mm 行列点阵数 128×64 dots 点距离 0.52×0.52 mm 点大小 0.48×0.48 mm

12864引脚资料以及硬件电路

12864引脚资料以及硬件电路D

LCD12864硬件连接 前不久在做一个小东西,使用STC12C5A60S2内部AD采集外界波形数据,驱动LCD12864画出采集的波形,并设置有数据处理切换功能,单独显示幅度与周期。调试LCD12864液晶屏过程中出现了不少问题,程序倒不是主要原因,关于12864的引脚大同小异。看到很多论坛倒是有不少LCD的底层驱动程序,不过引脚连接以及调试过程说的倒是不多。 LCD12864的引脚图: 硬件连接:

接vo脚,固定端的一段接vcc,另外一端应根据实际硬件连接。如果用的是1602,另一端直接接到gnd就 可以了,但是对于12864就应该看18脚的标记了,如果写的是NC ,那么另一端直接接地,如果是VEE, 那么就应该接到18脚,因为这时的18脚是负压输出端。根据这点确定你的对比对调节电路接法正确无 误。 3:关于串并行选择的问题。串并行选择对于有字库的12864适用(1602的四线驱动也可以叫做串行驱 动),如果有PSB引脚,那么你的屏应该可以支持串并行了。串并行的选择决定于PSB引脚的电位,一 般是低电平为串行模式,高电平为并行模式。有些同志在使用的时候对PSB进行了电位定义但是没有任 何显示,这是你应该注意一下LCM板上焊点,尤其是和PSB引脚相连的那些起跳线作用的焊点。因为大 多厂家在出厂的时候就预先设置为并行模式,也就是接到高电位上(VCC)。碰到这种情况把焊点跳线 重新焊接一下,接到低电位上就可以了。模式选择错误不显示是小问题,由于屏电路的不同,可能你在 驱动的时候损坏屏或者单片机,因为选择不对,定义的电位相当于短路,明白了吧。 B:软件问题 软件问题一般也就是定义的引脚不对,这种情况出现于真正的初学者,在copy 别人的程序或者屏本身的 模板程序没有修改引脚的定义,这种情况比较简单,只需要把引脚对应的端口重新定义一下就可以了。 二、显示不清楚 A:屏上的vo引脚(3脚)电位不对 如果你按照我上面的说法接了对比度电路,这时你只需要调节电位器的旋钮就可以了,最终可以得到你 满意的对比度,使显示最清晰。一般这个脚的电压是 - 6.2V左右,这个电压的显示效果是最好的. B:电源问题 很多同志们在现成的实验板上做试验,电源取自电脑USB口,这种情况容易出现显示不清楚的情况,原因 是供电电流不够,因为电脑的USB口为500mA供电。碰到此类情况,用外

Protues仿真12864液晶显示

Protues仿真液晶显示 目录 1 LCD12864简介1 2 LCD12864显示原理6 2.1汉字和英文显示原理6 2.2图形显示7 2.3应用说明8 2.4指令描述9 3软件仿真12 3.1汉字显示12 3.2图形显示17 3.3同时显示多个汉字23 3.4向上滚动显示29 4小结38 1LCD12864简介 ST7920类这种控制器带中文字库,为用户免除了编制字库的麻烦,该控制器的液晶还支持画图方式。该类液晶支持68时序8位和4位并口以及串口。 <2)KS0108类这种控制器指令简单,不带字库。支持68时序8位并口。 <3)T6963C类这种控制器功能强大,带西文字库。有文本和图形两种显示方式。 有文本和图形两个图层,并且支持两个图层的叠加显示。支持80时序8位并口。 <4)COG类常见的控制器有S6B0724和ST7565,这两个控制器指令兼容。支持68时序8位并口,80时序8位并口和串口。COG类液晶的特点是结构轻便,成本低。 ST7920 GND VCC V0 RS R/W E DB0-DB7 PSB RES VOUT BLA BLK KS0108 GND VCC V0 RS R/W E DB0-DB7 CS1 CS2 RES VOUT BLA BLK

此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示

LCD 中文资料

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。 这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。 1602采用标准的16脚接口,其中: 第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 1602液晶模块内部的控制器共有11条控制指令,如表2所示,

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 (有些模块是 DL:高电平时为8位总线,低电平时为4位总线) 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据

如何在LCD12864上任意画点

一、关于12864的画图功能。 我们知道在纸上画出一个点,我们要知道这个点在张纸上面的位置,也就是这个点在这张纸上面的坐标。而在12864上面画点也是一样,我们要先知道这个点在液晶屏上面的坐标,然后我们该坐标点黑或是点白可以了。而在这之前,我们要首先理解12864图形显示坐标。 12864的绘图显示坐标如图所示: 需要注意的是它的水平位址并不是一个点有一个位址的,它是16个格才有一个位址。它的垂直位址也分为上下两半部分。当我们给出位址是X是0,Y是0的时候,其实里面包含了16个点,也就是说我们一次要操作16个点。所有当我们要点亮一个点的时候,我们不仅要知道的位址,还要知道它在这个位址中是第几个位,也就是第几个点。 #include #define uint unsigned int #define uchar unsigned char sbit RS=P2^6; //这个是LCD的数据命令选择端 sbit RW=P2^5; //这个是LCD的写入或是读出选择端 sbit PSB=P3^2; //这个是LCD串行还是并行选择端 sbit RST=P3^4; //这个是LCD的复位端口 sbit LCDE=P2^7; // 这个是LCD的使能端 /* 延时子函数 */ void delay(uint x)

{ uint y; for(;x>0;x--) for(y=110;y>0;y--); } /* 忙碌检查 */ void lcd_busy() { RS=0; RW=1; P0=0XFF; LCDE=1; delay(2); while((P0&0x80)==0x80); /*如下图1,当LCD忙碌的时候BF位是为1,而我们只需要想知道这位,所有与上0x80,当它是1的时候得到0X80,当它是0的时候得到0.*/ LCDE=0; } /* 写入命令 */ void write_com(uchar com) { lcd_busy(); /*每次操作LCD之前都需要检查一次LCD是否忙碌,不过一般LCD工作比单片机快,所有都不用检查。*/ RS=0; RW=0; LCDE=0; P0=com; delay(1); LCDE=1; delay(3); LCDE=0; } /* 写入数据 */ void write_num(uchar num) { lcd_busy(); RS=1;

液晶显示屏12864资料

Winstar Display Co., LTD 華凌光電股份有限公司 住址: 407台中市中清路163號 No.163 Chung Ching RD., Taichune, Taiwan, R.O.C WEB: https://www.360docs.net/doc/67425090.html, E-mail: winstar@https://www.360docs.net/doc/67425090.html, Tel:886-4-24262208 Fax :886-4-24262207 SPECIFICATION CUSTOMER : MODULE NO.: WG12864A-YYH-V#

RECORDS OF REVISION

Contents 1.Module Classification Information 2.Precautions in use of LCD Modules 3.General Specification 4.Absolute Maximum Ratings 5.Electrical Characteristics 6.Optical Characteristics 7.Interface Description 8.Contour Drawing & Block Diagram 9. Timing Characteristics 10.Display Control Instruction 11.Detailed Explanation 12.Reliability 13.Backlight Information 14. Inspection specification 15. Material List of Components for RoHs

LCD12864液晶屏中文资料免费下载

中文字库液晶显示模块使用手册

一、液晶显示模块概述 1. 液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192 个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。 可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。 2. 外观尺寸:93×70×12.5mm 3. 视域尺寸:73×39mm 外形尺寸图 二、模块引脚说明 128X64 引脚说明 引脚名称 方向 说明 引脚名称 方向 说明 1 VSS - GND(0V) 11 DB4 I 数据4 2 VDD - Supply Voltage For Logic (+3.3v) 12 DB5 I 数据5 3 VO - Supply Voltage For LCD (悬空)13 DB6 I 数据6 4 RS (CS) O H: Data L: Instruction Code 14 DB7 I 数据7 5 R/W (SID) O H: Read L: Write 15 PSB O H: Parallel Mode L: Serial Mode 6 E (SCLK) O Enable Signal 16 NC - 空脚 7 DB0 I 数据0 17 /RST O Reset Signal 低电平有效 8 DB1 I 数据1 18 NC - 空脚 9 DB2 I 数据2 19 LEDA - 背光源负极(LED-OV) 10 DB3 I 数据3 20 LEDK - 背光源正极(LED+5v) 外形尺寸 ITEM NOMINAL DIMEN UNIT 模块体积 93×78×12.5 mm 视域 70.7×38.8 mm 行列点阵数 128×64 dots

12864点阵型液晶显示屏的工作原理

12864点阵型液晶显示屏的工作原理 12864点阵型液晶显示屏的基本原理与使用方法 转自https://www.360docs.net/doc/67425090.html,/dpj_step/compositive_6.html 点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将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 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7 DB0 H/L 数据线 8 DB1 H/L 数据线 9 DB2 H/L 数据线 10 DB3 H/L 数据线 11 DB4 H/L 数据线 12 DB5 H/L 数据线 13 DB6 H/L 数据线 14 DB7 H/L 数据线 15 CS1 H/L H:选择芯片(右半屏)信号 16 CS2 H/L H:选择芯片(左半屏)信号 17 RET H/L 复位信号,低电平复位

相关主题
相关文档
最新文档