资料介绍
/* LCD 型号:HD44780 */
/*打印机型号: EPSON M311 */
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//定义8255I/O端口地址
#define PCC8255 XBYTE[0x007f] //8255命令口地址
#define PC8255 XBYTE[0x007e] //8255的PC口地址
#define PB8255 XBYTE[0x007d] //8255的PC口地址
#define PA8255 XBYTE[0x007c] //8255的PC口地址
sfr RPCTL = 0xD8;
sbit RPCTL_5 = RPCTL^5;
sbit LS164A = P2^5;
sbit LS164cp = P2^6;
sbit Print_busy = P3^3;
sbit IC_RST = P1^1;
sbit IC_CLK = P1^0;
sbit IC_IO = P1^2;
sbit IC_PGM = P3^2;
uchar code table1[16]="FEDCBA9870123456";
uchar code table2[16]="0000123456789ABC";
void INIT_8255(void); /*初始化8255*/
void LcdInit(void); /* LCD初始化函数 */
void LcdCmd(uchar); /* LCD控制命令函数 */
void LcdData(uchar); /* LCD数据输入函数 */
void LcdClr(void); /* LCD清屏函数 */
void LcdStr(uchar *); /* 显示字符串函数 */
void LcdDisp(uchar x,uchar d);
void Delay_msec(uint x); /* 延时函数 */
uchar Getkey(void); /*键盘函数 */
void PrintInit(void); /*打印初始化函数*/
void PrintData (uchar d); /*打印函数*/
void PrintString(uchar *p); //打印字符串
void LcdDisp(uchar x,uchar d) //指定位置显示字符 x:LCD位置 d:字符
{
if(x<9)
{
LcdCmd(0x80 + x);
LcdData(d);
}
else
{
LcdCmd(0xc0 + x);
LcdData(d);
}
}
void LcdStr(uchar *p) /* 显示字符串函数 */
{
data uchar i;
LcdCmd(0x80); //设置显示数据RAM
for (i=0;i<=7;i++)
{
LcdData(*p); /* char of LCM */
p++;
}
LcdCmd(0xc0); //设置显示数据RAM
for (i=0;i<=7;i++)
{
LcdData(*p); /* char of LCM */
p++;
}
}
void LcdClr() /* LCD清屏函数?-----通过送0x20清屏*/
{
data uchar i;
LcdCmd(0x80); //设置显示数据RAM
for (i=0;i<=7;i++)
LcdData(0x20); /* char of LCM */
LcdCmd(0xc0); //设置显示数据RAM
for (i=0;i<=7;i++)
LcdData(0x20); /* char of LCM */
}
void LcdClr1(void) /* LCD清屏函数?-----通过控制命令清屏*/
{
LcdCmd(0x01);
}
void LcdCmd(uchar c) /* LCD控制命令函数 */
{
RPCTL_5 = 1;
Delay_msec(1); //延时1ms (1000us)
PCC8255 = 0x00;
PCC8255 = 0x02;
PB8255 = c ;
PCC8255 = 0x05;
PCC8255 = 0x04;
Delay_msec(1); //延时1ms (1000us)
RPCTL_5 = 0;
}
void LcdData(uchar c) /* LCD数据输入函数 */
{
RPCTL_5 = 1;
Delay_msec(1); //延时1ms (1000us)
PCC8255 = 0x01;
PCC8255 = 0x02;
PB8255 = c;
PCC8255 = 0x05;
PCC8255 = 0x04;
Delay_msec(1); //延时1ms (1000us)
RPCTL_5 = 0;
}
void LcdInit() /* LCD初始化函数 */
{
Delay_msec(41); //延时41ms
LcdCmd(0x3c); //设置字符参数
LcdCmd(0x08); //设置显示开/关
LcdCmd(0x01); //清除显示
Delay_msec(41); //延时41ms
LcdCmd(0x06); //设置输入方式
LcdCmd(0x10); //设置显示光标移位
LcdCmd(0x0c); //设置显示开/关
}
void Delay_msec(uint x) /* 延时函数 */
{
data uchar i;
do
{
for (i=0;i<125;i++) /*延时 8us x 125 = 1ms */
;
}
while((x--)!=0);
}
/*-----------------------------------------------------------------*/
void INIT_8255(void) /*8255 初始化 */
{
RPCTL_5 = 1;
_nop_ ();
PCC8255 = 0x80;
_nop_ ();
RPCTL_5 = 0;
}
/*---------------------------------------------------------------*/
uchar Getkey(void)
{
uchar i,lie,keycode,flag;
flag=0;
LS164A=0; //向74Ls164移入8个0
for (i=0;i<8;i++)
{
LS164cp=0;
LS164cp=1;
}
while((P2&0x1f)==0x1f); //是否有键闭合?
Delay_msec(100); //延时10ms (10,000us)
while((P2&0x1f)==0x1f); //是否有键闭合?
LS164A = 1; //向74Ls164移入8个1
for (i=0;i<8;i++)
{
LS164cp = 0;
LS164cp = 1;
}
i=0;
lie = 0; //lie --列号
while(i<8)
{
LS164A = 0; //向74Ls164移入0
LS164cp = 0;
LS164cp = 1;
if((P2&0x01)==0)
{
keycode=0x00 + lie; /*行基数 = 0x00 */
break;
}
else if((P2&0x02)==0)
{
keycode=0x08 + lie; /*行基数 = 0x08 */
break;
}
else if((P2&0x04)==0)
{
keycode=0x10 + lie; /*行基数 = 0x10 */
break;
}
else if((P2&0x08)==0)
{
keycode=0x18 + lie; /*行基数 = 0x18 */
break;
}
else if((P2&0x10)==0)
{
keycode=0x20 + lie; /*行基数 = 0x20 */
break;
}
else
{ i++;
lie = lie + 1; /*列号 + 1 ---下一列*/
if(i==8)
flag=1;
}
}
if(flag==0)
{
LS164A=0;
for (i=0;i<8;i++)
{
LS164cp=0;
LS164cp=1;
}
while((P2&0x1f)!=0x1f); /*按键是否释放*/
return(keycode); /*返回键码 */
}
else
return -1;
}
/*-------------------------------------------------------------------*/
void PrintData (uchar d) /*打印函数*/
{
while (Print_busy); //Busy=1,循环
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
while (Print_busy); //Busy=1,循环
RPCTL_5 = 1;
PA8255 = d;
PCC8255 = 0x08;
PCC8255 = 0x09;
RPCTL_5 = 0 ;
}
void PrintString(uchar *p) //打印字符串
{
while(*p!='\0')
{
PrintData(*p);
p++;
}
PrintData(0x0a);
}
/*-----------------------------------------------------------------*/
void PrintInit(void) /*打印初始化函数*/
{
uchar i;
uchar code Prninitdata[12] ={0x01,0x1b,0x40,0x1b,0x55,0x25,0x1c,0x26,
0x1b,0x33,0x02};
for (i=0;i<11;i++)
PrintData(Prninitdata[i]);
}
/*-----------------------------------------------------------------*/
void main()
{
data uchar key;
uchar code prn0[]=" 电 脑 中 心";
uchar code prn1[]="赵俊杰";
/*************************************************************/
Delay_msec(41); //延时41ms
Delay_msec(41); //延时41ms
Delay_msec(41); //延时41ms
Delay_msec(41); //延时41ms
INIT_8255(); /*8255初始化函数 */
LcdInit(); /* LCD初始化函数 */
PrintInit(); /*打印初始化函数
/*************************************************************/
PrintString(prn0);
Delay_msec(400); //延时400ms
PrintString(prn1);
LcdStr(table1);
Getkey();
LcdClr1();
key = Getkey()+0x30;
LcdDisp(1,key);
Getkey();
LcdStr(table2);
Getkey();
LcdClr();
}
- 适用于Windows 10 IoT的HD44780 LCD模块驱动程序
- SPI LCD HD44780芯片组开源
- 基于HD44780控制器的串行LCD上的Stopwatch3
- AN-645将HD44780字符LCD连接到MicroConverter®(UC014)
- AN-645:将HD44780字符LCD连接到MicroConverter<sup>®</sup>(UC014)
- LCD1602液晶显示屏的中文资料详细说明 15次下载
- DSP之hd44780教程 14次下载
- LCD1602液晶详细资料 478次下载
- LCD1602引脚定义 650次下载
- 基于HD44780的字符LCD与ADuC702x接口 64次下载
- 字符型液晶显示模块HD44780与单片机的接口及编程
- LCD为LCM161(HD44780驱动器)字符显示器驱动程
- HD44780使用说明
- hd44780 pdf,HD44780 lcd datash
- HD44780/KS0066中文资料,HD44780/KS0
- e² studio环境下添加源程序到当前工程的注意事项 542次阅读
- LCD1602的硬件参数和引脚定义 2.4w次阅读
- HD44780读写单片机C51程序免费下载 4146次阅读
- 使用HD44780读写单片机的C51程序详细概述 3112次阅读
- I2C总线驱动的C语言源程序详细说明 5050次阅读
- 英创:低成本LCD的选型与使用 1684次阅读
- AT89C5l单片机用电故障控制系统的设计 1040次阅读
- 连接器是怎么读懂C源程序的 1462次阅读
- LDC1000在STM32的程序 LDC1000的STM32驱动源程序 4109次阅读
- lcd1602实现字幕滚动原理_lcd1602滚动显示程序 4.2w次阅读
- 单片机与图形液晶显示器接口的方法 1.5w次阅读
- java程序编译后会产生什么 1.5w次阅读
- 命令解释程序工作流程 5091次阅读
- lcd1602显示程序 2.9w次阅读
- LCD的ARM编程方式,LCD Linux程序如何写入? 1619次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多