51驱动1602液晶+按键 protues仿真
程序:
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char Trg;
unsigned char Cont;
sbit lcdrs=P0^4;
sbit lcden=P0^6;
uchar code table1[]="20121029SAT12:00";
uchar code table2[]="0123456789";
void delay(uint z)
{
uint x,y;
for(x=0;x
for(y=0;y<110;y++)
;
}
void KeyRead( void )
{
unsigned char ReadData = P1^0xff; // 1
Trg = ReadData & (ReadData ^ Cont); // 2
Cont = ReadData; // 3
}
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(2);
lcden=1;
lcden=0;
}
void write_data(uchar dat)
{
lcdrs=1;
P2=dat;
delay(2);
lcden=1;
lcden=0;
}
void lcd1602_inti()
{
write_com(0x38);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x06);
delay(5);
write_com(0x01); //清屏
delay(5);
}
void main()
{
uchar i,x,y,z,w,p=0,m,a,s,d;
lcd1602_inti();
write_com(0x01);
while(1)
{ KeyRead();
write_com(0x80+0x00);
for(i=0;i<4;i++)
{
write_data(table1[i]);
delay(5);
}
write_com(0x80+0x40);
write_data(table2[x]);
delay(10);
write_data(table2[y]);
delay(10);
write_com(0x80+0x43);
write_data(table2[z]);
delay(10);
write_data(table2[w]);
delay(10);
write_com(0x80+0x46);
write_data(table2[d]);
delay(10);
write_com(0x80+0x48);
write_data(table2[m]);
delay(10);
if(Trg==0x01)
{
switch(p%4)
{ case 1: { a++;
if(a==21)
a=0;
} break;
case 2: {s++;
if(s==39)
s=0;
} break;
case 3: {d++;
if(d==9)
d=0;
} break;
}
x=a/10;y=a;
z=s/10;w=s;
}
if(Trg==0x02)
{
switch(p%4)
{ case 1: { a--;
if(a==0)
a=20;
} break;
case 2: {s--;
if(s==0)
s=38;
} break;
case 3: {d--;
if(d==0)
d=8;
} break;
}
x=a/10;y=a;
z=s/10;w=s;
}
if(Trg==0x04)
{p++;
if(p==9)
{p=0;}
if(p%4==0)
{m=1;}else m=0;
}
delay(50);
if((Trg==0x00)&&(Cont==0x01))
{ switch(p%4)
{ case 1: {a++;delay(60);
if(a==21)
a=0;
} break;
case 2: {s++;delay(60);
if(s==39)
s=0;
} break;
case 3: {d++; delay(60);
if(d==9)
d=0;
}break;
}
x=a/10;y=a;
z=s/10;w=s;
}
if((Trg==0x00)&&(Cont==0x02))
{
{ switch(p%4)
{ case 1: {a--;delay(60);
if(a==0)
a=20;
} break;
case 2: {s--;delay(60);
if(s==0)
s=38;
} break;
case 3: {d--; delay(60);
if(d==0)
d=8;
}break;
}
x=a/10;y=a;
z=s/10;w=s;
}
}
}
}
按键部分功能:
P1.2:功能键
p1.1:减
p1.0:加
p1.2按一下,开始设置液晶左下方00,然后可按键加减(00-20);
p1.2再按一下,开始设置液晶第二个00,然后可按键加减(00-38);
p1.2再按一下,开始设置液晶第三个参数0,然后可按键加减(0-8);
p1.2再按一下,最后一位编程1,表示设置完成;
可长时间按加减键,连续加减;
以上操作可重复。
关键字:51驱动 1602液晶 protues仿真
引用地址:
51驱动1602液晶+按键 protues仿真
推荐阅读最新更新时间:2024-03-16 14:38
1602液晶显示模块C语言程序(8位)
SMC1602A(16*2)模拟口线接线方式 连接线图: --------------------------------------------------- |LCM-----51 | LCM-----51 | LCM------51 | --------------------------------------------------| |DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0 | |DB1-----P1.1 | DB5-----P1.5 | RS-------P2.
[单片机]
STM32驱动W5100实现udp通信
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F103ZE 源代码: 驱动层代码: drv_w5100.h /********************************************************************* * w5100驱动层头文件 * (c)copyright 2013,jdh * All Right Reserved *文件名:drv_w5100.h *程序员:jdh *修改日期:2013/10/22 * 2013/10/23 * 2013/10/24 ************************
[单片机]
89C51单片机控制HT1621B驱动LCD(C程序)
//********WAVE-E6000/T*************** //*MCU: AT89C51 * //*MCU-crystal: 12M * //*********************************** #include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char //**************************** sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P2_0=P2^0;
[单片机]
采用C8051F单片机实现半导体激光器驱动电源的设计
半导体激光器(LD)体积小,重量轻,转换效率高,省电,并且可以直接调制。基于他的多种优点,现已在科研、工业、军事、医疗等领域得到了日益广泛的应用,同时其驱动电源的问题也更加受到人们的重视。使用单片机对激光器驱动电源的程序化控制,不仅能够有效地实现上述功能,而且可提高整机的自动化程度。同时为激光器驱动电源性能的提高和扩展提供了有利条件。 1总体结构框图 本系统原理如图1所示,主要实现电流源驱动及保护、光功率反馈控制、恒温控制、错误报警及键盘显示等功能,整个系统由单片机控制。本系统中选用了C8051F单片机。C8051F单片机是完全集成的混合信号系统级芯片(SOC),他在一个芯片内集成了构成一个单片机数据采集或控制系统所需要的几乎
[单片机]
使用51单片机并行口驱动LED数码管显示电路及程序
介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据
[单片机]
如何使用8051单片机实现双极LED驱动器电路?
在本文中,将介绍如何使用8051单片机实现双极LED驱动器电路。双极LED与常规双色LED的不同之处在于,双极LED只有两个引线,而常规双色LED具有三个引线。 双色LED是一种特殊类型的LED,它由两个在封装内反向连接的二极管组成。双色LED通常由三个端子组成,即一个公共引脚和两个独立的引脚。如果是共阴极LED,则公共引脚可以接地,如果是共阳极,则可以连接到 +5V 电源。但是,还有另一种具有两个端子的双色LED,称为双极LED。 该设备根据提供给终端之一的正信号起作用。例如,对于绿红双色LED,绿色端的正信号和红色端的负信号确保绿色LED正向偏置,红色LED反向偏置。这会导致绿灯闪烁。红色LED的情况也是如此。 但是,如
[单片机]
常用液晶屏LCD1602的使用
LCD_1602, 学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII码,我们通过向液晶送相应符号的ASCII码来显示这个字符。 总的来说这个用起来很简单的,到网上下载1602的数据手册,自己写写程序估计也就差不多了,我在这里主要是说说自己的对一些常见问题的经验,和LCD1602自定义字符的显示方法。 要显示我们自定义的字符,就要用到LCD中的CGRAM存储器(character generat
[单片机]
基于SSD1303及AT89C51驱动OLED显示屏的解决方案
1. 引言 有机电致发光显示(OLED)技术是下一代最有竞争力的平板显示技术。目前, OLED的研究重点是提高器件的稳定性、发光效率和高质量动态显示的驱动技术以达到实用化的要求.本文从实用的角度出发,首先论述了稳定的绿色有机薄膜电致发光器件的研制,阐述了96×64点阵的PM-OLED显示屏的制作,重点论述了利用Solomon公司的新产品,集控制器、行驱动器和列驱动器于一体的专用于OLED显示控制驱动电路SSD1303和单片机AT89C51驱动 OLED显示屏 的方法。本文工作结果是从实验室到应用的尝试,为OLED的实际应用提供了一种可行的方法。 2.矩阵显示屏的制备 2.1 OLED采用的结构及材料
[单片机]