N76E003 驱动 UC1705并口屏(8080)
Tips:本文主要代码源于原子哥STM32驱动8080液晶屏代码,在此表示感谢。
点击这里下载UC1705数据手册
通过数据手册可以得知CD引脚其实就是控制命令与数据切换的I/O。在程序中我们使用RS代替
下图为8080并口连接图
下图为N76E003引脚分配(因为没钱开板,所以本次全部使用热转印制作测试,故GPIO分配存在不合理的地方)
其中D0-D7使用下列函数赋值,具体操作就是每次右移一次,到最低位与1进行&运算
void SET_DATA(uchar val)
{P04=val&1;P03=(val>>1)&1;P01=(val>>2)&1;P00=(val>>3)&1;P10=(val>>4)&1;P11=(val>>5)&1;P12=(val>>6)&1;P13=(val>>7)&1;
}
其次所有的GPIO设置为强推挽模式
P00_PushPull_Mode;
P01_PushPull_Mode;
P02_PushPull_Mode;
P03_PushPull_Mode;
P04_PushPull_Mode;
P05_PushPull_Mode;
P06_PushPull_Mode;
P07_PushPull_Mode;
P10_PushPull_Mode;
P11_PushPull_Mode;
P12_PushPull_Mode;
P13_PushPull_Mode;
P14_PushPull_Mode;
P15_PushPull_Mode;
P16_PushPull_Mode;
P17_PushPull_Mode;
P30_PushPull_Mode;
下图为UC1705芯片初始化流程
这里以软复位为例,命令为0XE2
void LCD_Write_Byte(uchar Cmd,uchar Dat)//根据数据手册进行操作
{ LCD_CS=0; //片选LCD_RS=Cmd;//选择是发送命令or数据LCD_RD=0;LCD_WR=0;SET_DATA(Dat);LCD_RD=1;Timer0_Delay1ms(2);LCD_CS=1;LCD_RD=0;
}
LCD_Write_Byte(0,0xE2);//发送软复位命令
其余命令不在此赘述,以下为完整代码
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"#define uint unsigned int
#define uchar unsigned charsbit LCD_CS=P0^5; //片选端口
sbit LCD_RST=P0^6;//复位
sbit LCD_RS=P0^7;//数据/命令切换 C/D
sbit LCD_WR=P3^0;//写数据
sbit LCD_RD=P1^7;//读数据const uchar Number8X16[]={
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,};void SET_DATA(uchar val)
{P04=val&1;P03=(val>>1)&1;P01=(val>>2)&1;P00=(val>>3)&1;P10=(val>>4)&1;P11=(val>>5)&1;P12=(val>>6)&1;P13=(val>>7)&1;
}/**********************************************************************************
**函数名:void LCD_Write_Byte(u8 Cmd,u8 Dat)
**功能:对LCD12864写命令
**说明:无
**参数: Cmd =0 命令 Cmd=1 数据
**********************************************************************************/
void LCD_Write_Byte(uchar Cmd,uchar Dat) //LCD写入函数
{ LCD_CS=0; LCD_RS=Cmd;LCD_RD=0;LCD_WR=0;SET_DATA(Dat);LCD_RD=1;Timer0_Delay1ms(2);LCD_CS=1;LCD_RD=0;
}///**********************************************************************************
//**函数名:void LCD_Write_Byte(u8 Cmd,u8 Dat)
//**功能:对LCD12864写命令
//**说明:无
//**参数: Cmd =0 命令 Cmd=1 数据
//**********************************************************************************/
void LCD_Write_Byte80(uchar Cmd,uchar Dat) //LCD写入函数
{
// u16 para;LCD_CS=0; LCD_RS=Cmd;LCD_WR=0;SET_DATA(Dat);Timer0_Delay1ms(2);LCD_RD=1;Timer0_Delay1ms(2);LCD_CS=1;
}///**********************************************************************************
//**函数名:void LCD_Reset()
//**功能:对LCD12864复位
//**说明:无
//**********************************************************************************/
void LCD_Reset() //LCD硬件复位
{LCD_RST=0;Timer0_Delay1ms(50);LCD_RST=0;Timer0_Delay1ms(50);LCD_RST=1;Timer0_Delay1ms(50);
}void LCD_Coor(uchar x, uchar y) //LCD坐标控制
{LCD_Write_Byte(0,0xb0+y); //设置页地址LCD_Write_Byte(0,(x>>4)+0x10);//设置列地址高4位 LCD_Write_Byte(0,x&0x0f); //设置列地址低4位
}void LCD_Clr() //清屏函数
{uchar i,j; for(i=0;i<9;i++){ LCD_Coor(0,i); for(j=0;j<132;j++) { LCD_Write_Byte(1,0x00); }}
}void LCD_UC1705_Init()
{LCD_Reset();Timer0_Delay1ms(20);LCD_Write_Byte(0,0xE2); 软件复位Timer0_Delay1ms(20);//--表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)--//LCD_Write_Byte(0,0xA0); //ADC select segment direction Timer0_Delay1ms(20);//--表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向--//LCD_Write_Byte(0,0xC8); //Common direction Timer0_Delay1ms(20);//--表格第9个命令,0xA6为设置字体为黑色,背景为白色---////--0xA7为设置字体为白色,背景为黑色---//LCD_Write_Byte(0,0xA2); // //reverse displayTimer0_Delay1ms(20);//--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//LCD_Write_Byte(0,0xA4); // //normal displayTimer0_Delay1ms(20);//--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//LCD_Write_Byte(0,0xA2); //bias set 1/9Timer0_Delay1ms(20);//--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--////--0xF801,选择增压为5X,其实效果差不多--//LCD_Write_Byte(0,0xF8); //Boost ratio setTimer0_Delay1ms(20); LCD_Write_Byte(0,0x01); //x4Timer0_Delay1ms(20); //--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--////--选择从0x00到0X3F。用来设置背景光对比度。---/LCD_Write_Byte(0,0x81); //V0 a setTimer0_Delay1ms(20);LCD_Write_Byte(0,0x23); //Timer0_Delay1ms(20);//--表格第17个命令,选择调节电阻率--//LCD_Write_Byte(0,0x25); //Ra/Rb setTimer0_Delay1ms(20);LCD_Write_Byte(0,0x2F); //--表格第16个命令,电源设置。--//Timer0_Delay1ms(20);LCD_Write_Byte(0,0x40); //起始行从第一行开始Timer0_Delay1ms(20);
// LCD_Write_Byte(0,0xB0); Timer0_Delay1ms(20);
// LCD_Write_Byte(0,0x10); Timer0_Delay1ms(20);// LCD_Write_Byte(0,0x00); Timer0_Delay1ms(20);LCD_Write_Byte(0,0xAF); //显示开Timer0_Delay1ms(20);LCD_Clr();
}///****************************************************************************/
函数名称:Disp_Dat(uchar Row,uchar Col,uchar Number,uchar fs)
函数功能:将显示数据输出到屏幕指定位置显示
输入参数:low 行地址
输入参数:Col 列地址
输入参数:Number 显示数据
输入参数:fs 显示方式(0,反显,否则正常显示)
返 回 值:无
///****************************************************************************/
void Disp_Dat(uchar Row,uchar Col,uchar Number,uchar fs)
{uchar L_H,L_L; //列uchar Page; //页//计算页地址Page=0xb0+Row;L_H=0x10+(Col>>4);L_L=(Col&0x0f);LCD_Write_Byte(0,Page);LCD_Write_Byte(0,0x1f&L_H); //列地址,高低字节两次写入,从第0 列开始LCD_Write_Byte(0,L_L);if(fs==0){LCD_Write_Byte(1,~Number); }else{LCD_Write_Byte(1,Number); }
}///****************************************************************************/
函数名称:Disp_Nub8X16(uchar Row,uchar Col,uchar Number,uchar fs)
函数功能:将25x48点阵数值输出到屏幕指定位置显示
输入参数:low 行地址
输入参数:Col 列地址
输入参数:Number 显示数值
输入参数:fs 显示方式(0,反显,否则正常显示)
返 回 值:无
///****************************************************************************/
void Disp_Nub8X16(uchar Row,uchar Col,uchar Number,uchar fs)
{uchar i,j;uchar Temp;const uchar *STR_p;STR_p=&Number8X16[Number*16];for(i=0;i<2;i++){for(j=Col;j<Col+8;j++){//Temp=pgm_read_byte(STR_p);//Temp=*STR_p; Disp_Dat(Row,j,Temp,fs);STR_p++;}Row++;}
}void main(void)
{uint x=0;
P00_Quasi_Mode;
P01_Quasi_Mode;
P02_Quasi_Mode;
P03_Quasi_Mode;
P04_Quasi_Mode;
P05_Quasi_Mode;
P06_Quasi_Mode;
P07_Quasi_Mode;
P10_Quasi_Mode;
P11_Quasi_Mode;
P12_Quasi_Mode;
P13_Quasi_Mode;
P14_Quasi_Mode;
P15_Quasi_Mode;
P16_Quasi_Mode;
P17_Quasi_Mode;
P30_Quasi_Mode;LCD_UC1705_Init();//初始化Timer0_Delay1ms(10);while(1){ Disp_Nub8X16(0,2,x++,0);//执行累加显示数字Timer0_Delay1ms(1000);if(x>10)x=0;}
}
N76E003 驱动 UC1705并口屏(8080)相关推荐
- STM8驱动LCD段码屏
在工作中遇到用stm8驱动LCD段码屏,发现很有意思,特在此记录下来.整个说明过程由液晶屏显示原理,驱动断码LCD液晶屏的方式,stm8驱动断码屏三块进行说明. 一.液晶屏显示原理 液晶是一种介于固态 ...
- Android P 凹口屏支持,打造全面屏体验
作者: Megan Potoski, Android 系统用户界面产品经理 智能手机发展至今,边框越做越窄,屏幕中横比越做越大.而凹口屏 (又称 "刘海屏") 更是成为各大设备厂商 ...
- android 中间凹背景_Android 华为凹口屏适配小结
Android8.0 以后[凹口屏]得到迅速发展,目前已有了挖孔屏/水滴屏/刘海屏等各式各样的屏幕,究其根本依旧是[凹口屏],单华为一个品牌就涵盖了基本所有类型,而对于屏幕适配也是不可逃避的问题.和尚 ...
- 【解决方案】STM32L152单片机驱动段码LCD屏,执行HAL_LCD_Init函数失败返回HAL_TIMEOUT,长时间卡在LCD_FLAG_RDY的while循环里面的解决办法
STM32L152单片机驱动段码LCD屏,HAL_LCD_Init函数执行失败,卡在LCD_FLAG_RDY里面,函数返回HAL_TIMEOUT /*!< Wait Until the LCD ...
- 树莓派 java 驱动 微雪 墨水屏 epaper
树莓派 java 驱动 微雪 墨水屏 epaper B站视频指导 驱动结果显示 官方驱动测试 接线 初步测试 java驱动(仅二值图片展示,非灰阶部分) 引脚初始化 初始化墨水屏 点阵排列 显示方法 ...
- 树莓派 java 驱动 微雪 墨水屏 4灰阶 epaper
结果展示 4级灰度阶梯 4灰阶做图展示,如果侵权,请帮忙告知,马上删除 原图: 灰度图: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y ...
- PIC单片机驱动LCD断码屏代码生成工具
PIC单片机驱动LCD断码屏代码生成工具 PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分. 所以写了一个宏函数,自动生成驱 ...
- HT1623驱动LCD段码屏程序
HT1623驱动LCD段码屏--STM32F103 一.简介 二.使用步骤 1.管脚初始化配置 2.HT1623数据写入和初始化配置 3.操作段码屏例程 一.简介 有关芯片相关知识和使用原理好多博主已 ...
- 树莓派学习笔记(十六)编写内核驱动操控IO口代码原理分析
驱动源码.测试源码可查看博文:内核驱动操控IO口源码(pin4引脚) 寄存器地址.引脚对应的位数等原理可查看博文:BCM2835芯片手册导读 1.驱动代码编写 框架查看博文:基于框架编写驱动 1.1 ...
- ubuntu系统安装Nvidia显卡驱动重启后黑屏无法进入图形化界面
适用于我的解决方案方案是: [Ubuntu]Ubuntu16.04 安装显卡驱动重启黑屏问题处理_ubuntu安装显卡驱动后重启黑屏_街头卖艺小杨的博客-CSDN博客 也就是进入recovery mo ...
最新文章
- 一定要加强SQL数据库SA
- 什么是词向量?word2vec、Glove、FastText分别是什么?
- CentOs上搭建git服务器
- mysql 左连接 例子_mysql左连接自连接例子
- 十三、IntelliJ IDEA 中的版本控制介绍(下)
- excel进销存管理系统_通用Excel助力企业定制开发信息化系统常用功能模块
- chrome浏览器的跨域设置,前端修改跨域问题
- SharePoint 2013 基础版 离线安装步骤
- html百分比单位,视窗单位 vs 百分比单位
- SqlServer死锁com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 52) was deadlock
- spring实现在一个类中调用另一个类的方法
- 数学建模常用方法讲解(一)
- 使用Simian检查Java项目中冗余代码
- centos7 Redis多机多节点集群部署
- 宋朝历史衰败原因大揭秘
- 鸿蒙之初彩蛋攻略,鸿蒙圣女 热血精灵派鸿蒙灵帝解析
- AFM测试图像假象及其应对
- python提取微信聊天语音_利用Python进行微信,QQ的语音识别!内部技术的延伸版!...
- 高德地图 坐标与地址
- windows98雨林木风_黄山第72座峰的召唤,云端上的茶园山庄,等风等雨等你来