128*64 LCD显示驱动程序

发布者:幸福家园最新更新时间:2016-09-22 来源: eefocus关键字:128*64  LCD显示  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

 

//头文件部分
#include


//======================================================
//定义常用符号,LCD控制字符号常量,TIME0定时赋值常量
#define uchar unsigned char
#define uint unsigned int

#define DISPON 0x3f
#define DISPOFF 0x3e
#define DISPFIRSTLINE 0xc0
#define LCDBUZY 0x80
#define LIMIT 0x80 //128列限制

#define TL0NUMB (65536-50000)%256 //定时50MS,20次溢出为一秒定时中断
#define TH0NUMB (65536-50000)/256
#define TCOUNTF 10


//=========================================================
//定义引脚
sbit lck = P3^5; //锁存信号引脚


//=========================================================
//定义全局变量
uchar combyte; //LCD命令变量
uchar data status; //状态变量,左右半屏标志量
uchar tcount = 0; //限制定时时间标志
//uchar pagebyte = 0; //上下移页控制量
uchar colbyte = 120; //左右移列控制量


//=========================================================
//定义图形参数
uchar code A[]={0xe0, 0x0f, 0xf0, 0x0f, 0x98, 0x00, 0x8c, 0x00, // A,此处的参数是按照列输入来写的,英文内码是按照行输入来写的
0x98, 0x00, 0xf0, 0x0f, 0xe0, 0x0f, 0x00, 0x00};


//=========================================================
//函数原型
void IniLcd(void); //初始化LCD
void ClrLcd(uchar); //清屏LCD
void WrComL(uchar); //写左半屏幕命令字
void WrComR(uchar); //写右半屏幕命令字
void WrData(uchar,uchar,uchar); //写数据
void Locate(uchar,uchar); //LCD屏定位
void delayus(uint); //微妙级延迟
void delay(void); //延迟个几秒
//void PicturePage(void); //图形下移函数
void PictureCol(void); //图像左移函数

void IniTime0(void); //初始化定时器0,利用MCU的内部定时完成图像的移动过程

//=========================================================
//主程序部分
void main(void)
{
IniLcd();
IniTime0();
while(1); //对LCD的操作 
/*{
Picture();
delay();
ClrLcd(0x00);
}*/
}


/******************************************************/
/* 以下部分是LCD12864的驱动模块 */
/******************************************************/

//=========================================================
//初始化定时器0函数
void IniTime0(void)
{
TMOD = 0x01;
//TCON = 0x00;
TL0 = TL0NUMB;
TH0 = TH0NUMB;
TR0 = 1;
ET0 =1;
EA =1;
}


//=========================================================
//定时器中断函数
void Time0(void) interrupt 1
{
TR0 = 0;
TL0 = TL0NUMB;
TH0 = TH0NUMB;
tcount++;
if(tcount == TCOUNTF)
{
tcount = 0;

/*PicturePage();
pagebyte++;
if(pagebyte > 6)
pagebyte = 0;*/

PictureCol();
colbyte--;
}
TR0 = 1;
}


//=========================================================
//初始化LCD函数
void IniLcd(void)
{
combyte = DISPOFF;
WrComL(combyte);
WrComR(combyte);

combyte = DISPON;
WrComL(combyte);
WrComR(combyte);

combyte = DISPFIRSTLINE;
WrComL(combyte);
WrComR(combyte);

ClrLcd(0x00);

/*combyte = DISPFIRSTLINE;
WrComL(combyte);
WrComR(combyte);*/

Locate(0x00,0x00);
}


//=========================================================
//清屏LCD函数
void ClrLcd(uchar cbyte)
{
uchar i,j;
for(i=0;i<8;i++)
{
delayus(6);
for(j=0;j {
delayus(6);
WrData(cbyte,i,j);
}
}
}


//=========================================================
//微妙级延迟函数
void delayus(uint t)
{
while(t--);
}


//=========================================================
//延迟个几秒函数
void delay(void)
{
delayus(50000);
delayus(50000);
delayus(50000);
delayus(50000);
delayus(50000);
delayus(50000);
}


//=========================================================
//写左半屏幕命令字函数
void WrComL(uchar cbyte)
{
lck = 0;
P1 = 0x29; //E = 1;R/W = 1;D/I = 0; CS1 = 1; CS2 = 0;
lck = 1;
while(P0&LCDBUZY);
lck = 0;
P1 = 0x00; //E = 0;
lck = 0;

lck = 0;
P1 = 0x21; //E = 1;R/W = 0;D/I = 0; CS1 = 1; CS2 = 0;
lck = 1;
P0 = cbyte;
lck = 0;
P1 = 0x00; //E = 0;
lck = 1;
}


//=========================================================
//写右半屏幕命令字函数
void WrComR(uchar cbyte)
{
lck = 0;
P1 = 0x2a; //E = 1;R/W = 1;D/I = 0; CS1 = 0; CS2 = 1;
lck = 1;
while(P0&LCDBUZY);
lck = 0;
P1 = 0x00; //E = 0;
lck = 0;

lck = 0;
P1 = 0x22; //E = 1;R/W = 0;D/I = 0; CS1 = 0; CS2 = 1;
lck = 1;
P0 = cbyte;
lck = 0;
P1 = 0x00; //E = 0;
lck = 1;
}


//=========================================================
//LCD屏幕点定位函数
void Locate(uchar page,uchar col)
{
uchar com_page,com_col,right; 
switch(col&0xc0)
{
case 0x00: //左半屏幕
{
right = 0;
break;
}
case 0x40: //右半屏幕
{
right = 1;
break;
}
default: break;
}
com_page = page&0x07|0xb8; //将页数据转换为页命令字
com_col = col&0x3f|0x40; //将列数据转换为列命令字

switch(right)
{
case 0x00: //左半屏幕
{
WrComL(com_page);
WrComL(com_col);
status = 0;
break;
}
case 0x01: //右半屏幕
{
WrComR(com_page);
WrComR(com_col);
status = 1;
break;
}
default: break;
}
}


//=========================================================
//写数据函数
void WrData(uchar databyte,uchar page,uchar col)
{
Locate(page,col);

P0 = databyte;

lck = 0;
if(status)
P1 = 0x26; //E = 1; R/W = 0; D/I = 1; CS1 = 0; CS2 = 1;
else 
P1 = 0x25; //E = 1; R/W = 0; D/I = 1; CS1 = 1; CS2 = 0;
lck = 1;

//P0 = databyte;

lck = 0;
P1 = 0x00;
lck = 1;
}


//=========================================================
//图形函数,图像按页下移
/*void PicturePage(void)
{
uchar col,page;
uchar i = 0;
ClrLcd(0x00);
for(col=64;col<72;col++)
{
for(page=pagebyte;page {
WrData(A[i++],page++,col);
}
}
}*/


//=========================================================
//图形左移函数
void PictureCol(void)
{
uchar col,page;
uchar i = 0;
ClrLcd(0x00);
for(col=colbyte;(col=0);) //列控制
{
for(page=0;page<2;page++) //页控制
{
WrData(A[i++],page,col); //写数据,“i++”同步跟新数据
}
col++;
}
if(colbyte==0)
colbyte = 120;

}


关键字:128*64  LCD显示  驱动程序 引用地址:128*64 LCD显示驱动程序

上一篇:单片机电子钟汇编程序
下一篇:串行通讯rs232

推荐阅读最新更新时间:2024-03-16 15:11

STM32CUBEMX创建X-CUBE-BLE1例程
概述 X-CUBE-BLE1 是 STM32Cube 的扩展软件包。它在 STM32 微控制器上运行,包括 BlueNRG-MS 蓝牙低功耗设备的驱动程序。它基于 STM32Cube 软件技术构建,可简化跨不同 STM32 微控制器的可移植性。该视频展示了如何在 STM32CubeMX 工具中使用 X-CUBE-BLE1 包。 在这以X-NUCLEO-IDB05A2扩展版进行演示,主控板选择NUCLEO-L476RG。 硬件准备 安装软件包 可以选择下图的install进行安装。 选择需要安装的组件。 选择芯片型号 选择NUCLEO-L476RG开发板。 选择软件包 在Software Packs- Select Comp
[单片机]
STM32CUBEMX创建X-CUBE-BLE1例程
STM32控制TFTLCD显示
一、用STM32控制TFTLCD显示的编程方法,在编程驱动TFTLCD液晶显示器之前,我们先熟悉以下概念: 1、色彩深度,这是一个与TFTLCD显存对应的概念;所谓色彩深度就是每个像素点需要多少位的RGB 数据表示该点的颜色信息。注意,不同的TFTLCD显示器的RGB的对应关系不一样,这个可以在LCD 控制芯片手册中找到答案。 例: 某LCD显示支持8、16、24位RGB,这些位数是指该像素点颜色由8、16、24位RGB构成,但是 R\G\B三种颜色各占的位数可以查看数据手册。 2、TFTLCD的操作分为两种: A、对控制寄存器的读写操作(即程序员将要操作LCD显存寄存器的地址设置成可读或者可写)。 B、对
[单片机]
S3C2440 测试程序(六) LCD显示实验1
利用初始化设置中的void LCD_displayScreen来实现按一键盘全屏显示某种颜色: while(1) { unsigned char color; color = Uart_Getch(); switch(color) { case 'b': case 'B': LCD_displayScreen(0,0,0xff); Uart_Printf( The color is Blue! \n ); break; case 'r&
[单片机]
基于TMS320DM642的视频采集驱动程序
  视频终端的核心是图像的数字化处理模块.基于PC机的数字视频处理,给出了算法研究的途径,而基于高速DSP的应用模块才提供了实时嵌入式视频处理的可能.然而,基于DSP的海量视频数据的实时处理的关键则是实时、合理的视频数据采集.本文针对自行研制的基于TMS320DM642(以下简称DM642)DSP的视频处理板卡,使其在C64x系列DSP的实时操作系统DSP/BIOS的环境下运行,实现基于类/微驱动模型的视频采集驱动程序,并进一步描述采用EDMA(增强的直接存储器存取控制器)的数字视频图像信号的实时传输.   1 类/微驱动程序模型   C64x系列的DSP系统给出了类/微驱动模型 的驱动程序结构,采用该模型进行驱动程序设计
[嵌入式]
基于TMS320DM<font color='red'>64</font>2的视频采集<font color='red'>驱动程序</font>
基于嵌入式Linux的步进电机驱动程序设计
  1.引言   随着嵌入式技术的飞速发展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从而大幅度提高了处理能力,方便了设计开发。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品 。   嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU为
[单片机]
基于嵌入式Linux的步进电机<font color='red'>驱动程序</font>设计
泰克推出面向测试和测量仪器的开源 Python 原生驱动程序
明显改善测试自动化相关用户体验,并为泰克和 Keithley 的客户提供无缝的仪器控制效果 中国北京2023年 11 月 15 日 – 业内领先的测试与测量解决方案提供商泰克科技公司于今天宣布推出开源 Python 仪器驱动程序包。 该软件包完全免费,可面向仪器自动化应用提供原生的 Python 用户体验。 这款开源 Python 驱动程序包可以兼容大量泰克和 Keithley 品牌设备,在为开发和升级工作不断提供支持的同时,可确保测试与测量领域的用户能够用到最新的功能和改进成果。 目前,客户可将其融入日常工作流程并与合适的集成开发环境 (IDE) 搭配使用,借助自动完成、精确类型提示、全方位内置帮助、实时语法检查和
[测试测量]
基于89C51单片机串行A/D驱动程序的设计
  串行A/D转换器转换后的结果是以串行方式输出,数字量以串行方式输出可简化系统的连线,缩小电路板的面积,节省系统的资源。下面以TLC2543为例,介绍串行A/D驱动程序的设计。      89C51单片机与TLC2543芯片的接口电路图如下图所示。TLC2543的3个控制输入端CS(的反)、I/OCLOCK、DATAINPUT和一个数据输出端DATAOUT分别与单片机的P1.4、Pl.l、P1.2和P1.3引脚相连,单片机采用的晶振频率为12MHz。      电路设计时,我们将TLC2543有两个基准电压输入REF+、REF-分别与电源(VCC)、GND相连,这样连接可保证数字输出的满度和零点,但在高精度的测量要求中,如果VC
[单片机]
基于89C51单片机串行A/D<font color='red'>驱动程序</font>的设计
Omdia:内嵌触控式TFT LCD显示屏将成汽车中控屏应用为主流
尽管近年来用于汽车中控屏(CSD) 的触控式显示屏出货增长有所放缓,但最新的Omdia研究显示,内嵌触控式TFT LCD显示屏的出货量仍在增加,2023年达到2620万台。Omdia估计,2023年的出货份额为35.1%,并预计该比例将在2025年超过50%。 汽车中控屏应用中按技术划分的触控式显示屏出货份额 由于其技术优势、集成便性和显示器平均售价的增加,面板制造商正在积极向客户推广内嵌触控式TFT LCD显示屏。内嵌触控式TFT LCD显示屏将触控式传感器与显示屏本身结合在一起,这在智能手机应用中的出货份额达到了55.2%(2023年),平板电脑应用中的出货份额达到了45.1%。在汽车应用中,触控式显示屏的出货量不断增加
[汽车电子]
Omdia:内嵌触控式TFT <font color='red'>LCD显示</font>屏将成汽车中控屏应用为主流
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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