128*64液晶简单单片机代码

发布者:不染尘埃最新更新时间:2015-06-19 来源: 51hei关键字:128*64  液晶  单片机 手机看文章 扫描二维码
随时随地手机看文章
控制芯片是常用的HD61202列驱动,HD61203行驱动

 


  

一个汉字由16*16个像素点构成。

 

扫描顺序上下,然后到第2列再上下,一次类推。

显示结果:

 参考文献:<<手把手教你学单片机c程序设计>> 下载地址:http://www.51hei.com/bbs/dpj-22812-1.html

主函数代码:

#include

#define uchar unsigned char
#define uint unsigned int

#define dataport P0   //数据口
sbit CS1=P2^4;    //左显引脚
sbit CS2=P2^3;    //右显引脚
sbit RST=P2^2;    //复位引脚
sbit rs=P2^7;    //数据或指令寄存器引脚
sbit rw=P2^6;    //读或写操作引脚
sbit en=P2^5;    //读写时能引脚
void delay(unsigned long v); //延时
void wcode(uchar c,uchar csl,uchar csr);  //写指令
void wdata(uchar c,uchar csl,uchar csr);  //写数据
void set_startline(uchar i);    //设置起始行
void set_xy(uchar x,uchar y);    //设置X,Y方向
void dison_off(uchar k);     //显示器开或关
void reset();       //复位
void lcd_init();       //显示器初始化
void lw(uchar x,uchar y,uchar dd);   //将数据写入左右半屏
void display_hz(uchar xx,uchar yy,uchar n,uchar fb); //显示汉字函数
uchar code hz[]; //汉字字摸
#include "12864hh.h"  //调用文件(函数库)

void main(void)
{
 lcd_init();
 delay(1000);
 while(1)
 {

display_hz(2,0,0,0);              //display_hz( 显示列位置,显示页位置,显示第几个汉字,是否反显);
display_hz(4,0,1,0);
display_hz(6,0,2,0);
display_hz(8,0,3,0);
display_hz(10,0,4,0);
display_hz(2,4,5,0);
display_hz(4,4,6,0);
display_hz(6,4,7,0);
display_hz(8,4,8,0);
display_hz(10,4,9,0);


}
delay(60000);

 

 

 }

//---------------------------------------------字形码------------------------------------------------------

uchar code hz[]={
0x20,0x04,0x20,0x04,0x22,0x42,0x22,0x82,0xFE,0x7F,0x21,0x01,0x21,0x01,0x20,0x10,
0x20,0x10,0xFF,0x08,0x20,0x07,0x22,0x1A,0xAC,0x21,0x20,0x40,0x20,0xF0,0x00,0x00,/*"我",0*/

0x00,0x40,0x40,0x20,0xB2,0xA0,0x96,0x90,0x9A,0x4C,0x92,0x47,0xF6,0x2A,0x9A,0x2A,
0x93,0x12,0x91,0x1A,0x99,0x26,0x97,0x22,0x91,0x40,0x90,0xC0,0x30,0x40,0x00,0x00,/*"爱",1*/

0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",2*/

0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,/*"片",3*/

0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00, /*机",4*/

[page]

0x00,0x00,0x00,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0x10,
0x04,0x10,0x04,0x10,0x04,0x10,0x06,0x10,0x04,0x10,0x00,0x18,0x00,0x10,0x00,0x00,/*"二",0*/

0x00,0x04,0x0C,0x04,0x04,0x04,0x55,0x0A,0x55,0x0A,0x55,0x09,0x85,0x2A,0x7F,0xCC,
0x85,0x28,0x55,0x19,0x55,0x09,0x55,0x02,0x05,0x06,0x0C,0x02,0x04,0x02,0x00,0x00,/*"零",1*/

0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,/*"一",2*/

0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,/*"一",3*/
0x40,0x04,0x20,0x04,0x10,0x04,0x0C,0x04,0xE3,0x07,0x22,0x04,0x22,0x04,0x22,0x04,
0xFE,0xFF,0x22,0x04,0x22,0x04,0x22,0x04,0x22,0x04,0x02,0x04,0x00,0x04,0x00,0x00};/*"年",4*/

 

//---------------------------12864.h-----------函数库------------

void delay(unsigned long  v)  //延时子函数
{
while(v--);
}

void lcd_busy()  //判断是否繁忙函数
{
rs=0;
rw=1;
dataport=0xff;
while(1)
{
 en=1;
 if(dataport<0x80)break;  //并口最高位为1时表示芯片正在工作
 en=0;
}
en=0;
}

void wcode(uchar c,uchar csl,uchar csr)  //写指令函数
{
CS1=csl;                                                  //显示左屏变量
CS2=csr;                                                  //显示右屏变量
lcd_busy();
rs=0;
rw=0;
dataport=c;
en=1;
en=0;
}

void wdata(uchar c,uchar csl,uchar csr)   //写数据子函数
{
CS1=csl;
CS2=csr;
lcd_busy();
rs=1;
rw=0;
dataport=c;
en=1;
en=0;
}

void lw(uchar x,uchar y,uchar dd)          // 写1个字节进RAM函数
{
 if(x>=64)                                                //列大于64说明是右半屏操作
 {
  set_xy(x-64,y);
  wdata(dd,0,1);
 }
 else 
 {                                                              //否则左半屏
 set_xy(x,y);
 wdata(dd,1,0);
 }
}
void set_startline(uchar i)                     //设置起始行
{       
i=0xc0+i;      
wcode(i,1,1);     

void set_xy(uchar x,uchar y)                //列,行定位函数
{    
x=x+0x40;                      
y=y+0xb8;                    
wcode(x,1,1);                    
wcode(y,1,1);                    

void dison_off(uchar k)              //液晶关,开函数
{
k=k+0x3e;
wcode(k,1,1);
}

void reset()                                //复位函数
{
 RST=0;
 delay(40);
 RST=1;
 delay(40);
}

void lcd_init(void)                      //液晶初始化
{uchar x,y;              
reset();    
set_startline(0);   
dison_off(0);     
for(y=0;y<8;y++)    
 {
 for(x=0;x<128;x++)lw(x,y,0);
 }
dison_off(1);     

void display_hz(uchar xx, uchar yy, uchar n, uchar fb)    //中文字显示函数  扫描方法采用逐列式
{     
uchar i,dx;                        
for(i=0;i<16;i++)     //一个汉字列扫描值
{dx=hz[2*i+n*32];    //汉字上半部分扫描
if(fb)dx=255-dx;    //反显
lw(xx*8+i,yy,dx);    //数据写入芯片
dx=hz[(2*i+1)+n*32];    //汉字下半部分扫描
if(fb)dx=255-dx;          //反显
lw(xx*8+i,yy+1,dx);   //数据写入芯片
}       
}

关键字:128*64  液晶  单片机 引用地址:128*64液晶简单单片机代码

上一篇:异或妙用
下一篇:C++ 函数重载例子

推荐阅读最新更新时间:2024-03-16 14:04

51单片机工作于方式0的定时器模式
51单片机的 模式0(13位定时器/计数器) 第一步:通过设置TMOD中的M1/M0位设置,即可完成模式选择 “00”为模式0(13位定时/计数模式) “01”为模式1(16位定时/计数模式) “10”为模式2(8位'自动重装初'值定时/计数模式) “11”为模式3(分割为 2个8位计数模式) 第二步:打开总中断(EA)、开T0中断(ET0)、启动T0(TR0) 因为寄存器在复位后初始值都为“0”,默认属于关闭的状态,所以我们在使用T0中断功能时,需要将这些位置“1”才可启动定T0。 第三步:根据时钟计算并装载合适的初值在T0模式中,
[单片机]
51<font color='red'>单片机</font>工作于方式0的定时器模式
基于89C51单片机的环境噪声测量仪
   1 引 言      环境噪声监测,是人类提高生活质量,加强环境保护的一个重要环节,在各大城市的繁华街区和居民区,已有大型环境噪声显示器竖立街头。但目前国内的便携式噪声测试仪,多为价格昂贵的进口专用设备,除卫生、计量等环保专业部门拥有外,无法作为民用品推广普及。本文介绍一种以89C51单片机为核心,采用V/F转换技术构成的低成本、便携式数字显示环境噪声测量仪。该仪器工作稳定、性能良好,经校验定标后能满足一般民用需要,可广泛应用于工矿企业、机关、学校等需要对环境噪声进行测量和控制的场合。 2 声压级的测量机理   人耳的听阈一般是20μPa,痛阈一般是200 Pa,其间相差107倍,这样宽广的声压范围很不易测量,
[应用]
51单片机知识大汇总
1.取指译码执行模型:首先我们来看看单片机是如何工作的,我们拿电脑的主板来作为对比,我们买电脑时,总是追求处理器的主频。处理器的工作原理是从存储器上取出一条指令,然后对指令译码,译码完后执行。然后取下一条指令,译码,执行。它为什么能这么有序的工作?是因为它有一个工作时钟,在这个工作时钟的统一管理下,处理器有序的工作,这里的主频就是工作时钟的速度,当然,现在你可能也知道主频越高,取指译码速度越快,性能越好。那么你可能会问,这跟51单片机有什么关系,OK,切入正题,单片机的工作也是这个原理,从存储器上取指,译码,执行。但是单片机的存储器在哪?在单片机的内部,对于电脑来说,是把处理器,内存集中在一块主板上。而现在你应该很明确,对于单
[单片机]
基于AVR单片机的三相晶闸管触发电路的设计
简介:本系统采用单片机来控制可控硅的触发,是可控硅应用的发展趋势。本系统在实际应用中也已显示出触发精度高、可靠性高、易于调试、操作方便等优点。该触发电路在实际应用中已成功触发过100 A~400 A的晶闸管。 引 言 用于晶闸管三相全控桥整流装置的触发电路,若仅从触发信号的相位控制方式来看,只有多通道相位控制和单通道相位控制两种。前者的典型电路为锯齿波移相触发电路,它用于三相全控桥式主电路时,移相通道多达6个,由于各个通道中同步电路本身特性的差异,发出的触发脉冲相位对称度很差。另外,传统的晶闸管整流或逆变系统需要3个同步变压器来得到触发脉冲的同步信号,不仅增加了系统的成本,同时给安装调试带来不便。随着新型器件的发展,数字移相技
[单片机]
基于AVR<font color='red'>单片机</font>的三相晶闸管触发电路的设计
51单片机C51毫秒级(ms)精确延时
如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; for(j=n;j 0;j--) for(i=112;i 0;i--); } 用keil可以看出这个延时的时间,我们先延时1ms(Delayms(1))。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时0.00142253s—0.00042209s=0.00100044s≈1ms 同样如果想延时15ms的话,用Delayms(15),实际延时0.01480903s≈15m
[单片机]
赛普拉斯PSoC、MCU及蓝牙低功耗解决方案组合日益丰富
对于智能家电到可穿戴健康跟踪装置以及工厂自动化产品等互联设备的设计人员而言,物联网具体应用中某些特殊要求的实现难度已经远超过了物联网 (IoT)互联技术的实现。嵌入式解决方案供应商赛普拉斯半导体公司 (Nasdaq: CY)凭借其基于ARM -Cortex -M的PSoC 可编程片上系统、微控制器(MCU)和蓝牙低功耗(BLE)解决方案组成的扩展产品组合,解决了物联网的多样性以及上市时间和功耗等常见设计问题。 自2015年3月与Spansion合并后,赛普拉斯PSoC 4系列已经推出了超过180个新型号,原Spansion开发的FM4和FM0+ 灵活微控制器系列也推出了超过150个新型号。在本次2016嵌入式电子与工业电脑应用展
[物联网]
MCU销售金额/出货量可望连年创新高
在各种消费性、工业与汽车应用需求的带动下,IC Insights预估,到2020年为止,微控制器(MCU)的销售金额与出货量数字都将连年打破历史纪录。预估到2020年时,全球MCU的销售金额将达到209亿美元,出货量则为267亿颗。 在平均销售价格(ASP)方面,过去几年高阶32位元MCU普遍流行,但价格也迅速滑落,使得整体MCU ASP不断下跌。2015年全球MCU的ASP价格为0.72美元,创下历史最低纪录。不过,IC Insights预估,32位元MCU的价格将开始止稳,甚至在未来几年有机会小幅增加。
[单片机]
<font color='red'>MCU</font>销售金额/出货量可望连年创新高
面向51单片机的Keil uVision4基本数据类型简介
熟悉基本数据类型是使用C语言编绎器编写程序的基本前提之一,使用keil uVision4开发51单片机C程序当然也不例外。本文将系统地介绍Keil uVision4的各种基本数据类型,希望对读者有益。 注:此为初稿,如有错误和疏漏之处,恳请读者批评指正。 在标准C语言中,存在着如下六种基本数据类型: 1、char:字符型; 2、short = short int:短整型 3、int:整型 4、long = long int:长整型 5、float:单精度浮点型 6、double:双精度浮点型 而面向51单片机的Keil uVision4对此进行了简化, 因此,可以理解为只存在如下四种基
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved