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)相关推荐

  1. STM8驱动LCD段码屏

    在工作中遇到用stm8驱动LCD段码屏,发现很有意思,特在此记录下来.整个说明过程由液晶屏显示原理,驱动断码LCD液晶屏的方式,stm8驱动断码屏三块进行说明. 一.液晶屏显示原理 液晶是一种介于固态 ...

  2. Android P 凹口屏支持,打造全面屏体验

    作者: Megan Potoski, Android 系统用户界面产品经理 智能手机发展至今,边框越做越窄,屏幕中横比越做越大.而凹口屏 (又称 "刘海屏") 更是成为各大设备厂商 ...

  3. android 中间凹背景_Android 华为凹口屏适配小结

    Android8.0 以后[凹口屏]得到迅速发展,目前已有了挖孔屏/水滴屏/刘海屏等各式各样的屏幕,究其根本依旧是[凹口屏],单华为一个品牌就涵盖了基本所有类型,而对于屏幕适配也是不可逃避的问题.和尚 ...

  4. 【解决方案】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 ...

  5. 树莓派 java 驱动 微雪 墨水屏 epaper

    树莓派 java 驱动 微雪 墨水屏 epaper B站视频指导 驱动结果显示 官方驱动测试 接线 初步测试 java驱动(仅二值图片展示,非灰阶部分) 引脚初始化 初始化墨水屏 点阵排列 显示方法 ...

  6. 树莓派 java 驱动 微雪 墨水屏 4灰阶 epaper

    结果展示 4级灰度阶梯 4灰阶做图展示,如果侵权,请帮忙告知,马上删除 原图: 灰度图: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y ...

  7. PIC单片机驱动LCD断码屏代码生成工具

    PIC单片机驱动LCD断码屏代码生成工具 PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分. 所以写了一个宏函数,自动生成驱 ...

  8. HT1623驱动LCD段码屏程序

    HT1623驱动LCD段码屏--STM32F103 一.简介 二.使用步骤 1.管脚初始化配置 2.HT1623数据写入和初始化配置 3.操作段码屏例程 一.简介 有关芯片相关知识和使用原理好多博主已 ...

  9. 树莓派学习笔记(十六)编写内核驱动操控IO口代码原理分析

    驱动源码.测试源码可查看博文:内核驱动操控IO口源码(pin4引脚) 寄存器地址.引脚对应的位数等原理可查看博文:BCM2835芯片手册导读 1.驱动代码编写 框架查看博文:基于框架编写驱动 1.1 ...

  10. ubuntu系统安装Nvidia显卡驱动重启后黑屏无法进入图形化界面

    适用于我的解决方案方案是: [Ubuntu]Ubuntu16.04 安装显卡驱动重启黑屏问题处理_ubuntu安装显卡驱动后重启黑屏_街头卖艺小杨的博客-CSDN博客 也就是进入recovery mo ...

最新文章

  1. 快来参加北京首届数字技术大体验活动 赢取万元奖励、百度用友致远实习就业机会...
  2. 解决编译失败 Attribute meta-data#android.support.VERSION@value value=(26.0
  3. TCP第四次挥手为什么要等待2MSL(最长报文段寿命,Maximum Segment Lifetime)
  4. 理解SQL Server中索引的概念,原理以及其他
  5. 【机器学习】朴素贝叶斯
  6. Android怎么导入Moudle
  7. leetcode第一刷_Binary Tree Zigzag Level Order Traversal
  8. 【项目管理】git和码云的使用
  9. 前端学习(2702):重读vue电商网站23之element-ui 如何按需导入
  10. 待办事项桌面插件_让浏览器重获整洁——标签页管理插件:OneTabOneTab PlusToby...
  11. 压测学习总结(3)——Jmeter 脚本如何生成
  12. 统信 UOS 适配支持百度飞桨 AI 深度学习平台;阿里回应“马云遭印度法院传唤”;fastjson 1.2.73 发布 | 极客头条
  13. 为GitHub项目加入Travis-CI的自动集成
  14. 打印机提示手动进纸解决办法
  15. element ui下拉框实现
  16. 微信小程序云开发教程-云函数操作数据库-增、查
  17. 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
  18. 服务器设置浏览器是否缓存
  19. DataFrame合并
  20. 阿里JAVA实习生面试总结(2019年春招)

热门文章

  1. matlab识别中国象棋棋盘,c – 使用OpenCV在棋盘中检测中国象棋棋子
  2. 2021 年年度最佳开源软件!
  3. Unity 游戏数据的存档读档,数据加密与解密
  4. 北斗在线app服务器,北斗卫星导航app,北斗卫星导航app官网手机版预约 v1.0 - 浏览器家园...
  5. MATLAB滑动T检验
  6. TGBUS主页面 HTML的编写
  7. JavaScript调用pc和手机摄像头
  8. Linux基础命令(2)
  9. 小米下拉导航栏,36kr 下拉导航栏解决方法
  10. 高德地图使用vue-amap 自定义点坐标