求对外来低电平个数计数并显示的1602的51单片机程序

如题所述

第1个回答  2017-06-22
先定义一下LCD的使能端口一些设置
例如:
sbit LCD_RS = P2^6; //复位端
sbit LCD_RW = P2^5; //写数据端
sbit LCD_EP = P2^7; //使能端
添加读写以及初始化LCD的代码
/****************侧忙函数************************/
BOOL lcd_bz()
{
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1
LCD_EP = 0;
return result;//返回侧忙结果
}

/****************写命令函数************************/
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
_nop_();
_nop_();
P0 = cmd; //将8位指令通过P0口传给1602
_nop_();
_nop_(); //用于产生一个脉冲宽度
_nop_();
_nop_();
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 0;
}

lcd_pos(BYTE pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}

/****************写数据函数************************/
lcd_wdat(BYTE dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
LCD_RS = 1;
LCD_RW = 0;
LCD_EP = 0;
P0 = dat; //将8位数据通过P0口传给1602
_nop_();
_nop_(); //用于产生一个脉冲宽度
_nop_();
_nop_();
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EP = 0;
}

lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay(1);
lcd_wcmd(0x0c); //显示开,关光标
delay(1);
lcd_wcmd(0x06); //移动光标
delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(1);
}

添加完之后在main函数中添加初始化LCD的函数
例如
void main(void)
{
BYTE i;
lcd_init();// 初始化LCD
delay(10);
while(1)
{
lcd_wcmd(0x06);//向右移动光标
lcd_pos(0);//设置显示位置为第一行的第1个字符
i = 0;
tt.XX.number = ??; //这边问好表示你需要显示的数据,这样你应该明白怎么做了
//将你的数据赋值给number即可,然后让他显示dis的数据
while(tt.dis1[ i ] != '\0')
{
lcd_wdat(dis1[ i ]);
i++;
delay(30);//控制两字之间显示速度
}
delay(500);//控制两字之间显示速度
lcd_wcmd(0x01);//清除LCD的显示内容

}

}
//程序的定义头文件下写这个,主要是省去数据转换这一环节,让自己代码更加快速转换
typedef union
{
unsigned char dis1[4];
struct
{
int number;
}XX;
}TT;
idata TT tt;追问

现在声音模块输出数字量是低电平,拍掌输出的也是间断的低电平。但是怎么写程序

想做一个基于51单片机按键计数用LCD1602显示的编程0-99
加上这些东西,将显示语句换成1602_display(i)即可,当然你可以将其改为只显示2个数字 sbit rw=P1^4;sbit rs=P1^3;sbit lcden=P1^5;define db P2 void write_com(uchar com)\/\/液晶屏写命令 { db=com;rs=0;rw = 0;lcden=0;Delay1ms(12);lcden=1;Delay1ms(12);lcden=0;} void writ...

用51单片机控制1602液晶显示10进制数字~~
RS=1; \/\/RS为高电平,RW为低电平时,可以写入数据 RW=0;E=0; \/\/E置低电平(根据表8-6,写指令时,E为高脉冲, \/\/ 就是让E从0到1发生正跳变,所以应先置"0"P0=y; \/\/将数据送入P0口,即将数据写入液晶模块 _nop_();_nop_();_nop_();_nop_(); \/\/空操作四个机器周期,给硬件反应时间 E=1; ...

51单片机ds18b20小数显示1602
发出存在脉冲。51单片机ds18b20小数显示1602是因为出现了发出存在脉冲导致的。1602液晶模块高精度4位小数显示,温度分辨率0.0625℃,液晶模块第一行显示的是DS18B20的64位激光序列号,液晶模块第二行显示的是实际温度。

求大神帮我看看这程序错在哪里啊! 用51单片机定时器写的1602显示...
显示 不能死循环 你要把计时器 设定时中断 假设中断一次 50Ms 计数a=1 当a=20时 过去了一秒 刷新下1602显示 main 里面 放计数判断

51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号
1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、导入51单片机的头文件以及LCD1602的头文件。3、创建一个延时函数,可以传入想要具体延时的时长,...

...用单片机和4*4矩阵键盘输入数字并在LCD1602上显示出来的C语言程序...
sbit RW=P2^6;\/\/1602读写引脚 sbit RS=P2^5;\/\/1602数据\/命令选择引脚 \/ 名称 : Delay_1ms()功能 : 延时子程序,延时时间为 1ms * x 输入 : x (延时一毫秒的个数)输出 : 无 \/ void Delay_1ms(uint i)\/\/1ms延时 { uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);} ...

51单片机1602液晶显示汉字
显示汉字的方法为:在51单片机上使用LCD1602显示汉字,需要先将汉字转换成对应的点阵数据,然后再通过LCD1602的指令将点阵数据写入到LCD1602的CGRAM中,最后在指定位置显示即可。根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二...

求51单片机,用1602lcd显示的简易计算器的程序。除了加减乘除,还要有开...
把8位数据线接到单独一个P*口上,其他E,RS,WR,RD分别接到另一个数据口上,再就是电源和地接上。背光控制加一个三极管,BLA 背光电源正极 BLK 接地,Vo是调对比度的,加两个电阻分压,先用电位器调到合适的对比度,量一下电阻,分别焊上就行 ...

怎么实现mcs-51单片机对外部脉冲的计数功能
外部脉冲接单片机的外部中断或2 个定时\/计数器都可以计数的。

1602显示屏显示第一行和第二行数字怎么输入程序
1、首先我们打开KeilμVision编译器,新建一个工程,然后保存在硬盘上的位置。2、其次导入51单片机的头文件以及LCD1602的头文件。创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。3、最后最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环...

相似回答