单片机独立按键并让1602显示出来
答案:2 悬赏:80 手机版
解决时间 2021-01-24 10:05
- 提问者网友:那叫心脏的地方装的都是你
- 2021-01-24 01:08
单片机独立按键并让1602显示出来
最佳答案
- 五星知识达人网友:大漠
- 2021-01-24 02:18
具体要求是什么,可以帮你完成。使用外部中断0,按1次加1并LCD显示
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef bit BOOL;
BYTE Time=0;
sbit LCD_RS = P1^2;
sbit LCD_RW = P1^1;
sbit LCD_EP = P1^3;
delay(int ms)
{ // 延时子程序
int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);
LCD_EP = 0;
return result;
}
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
_nop_();
_nop_();
P2 = cmd;
_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;
P2 = dat;
_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()
{
EX0=1;
EA=1;
lcd_init(); // 初始化LCD
delay(10);
while(1)
{
lcd_wcmd(0x06); //向右移动光标
lcd_pos(0); //设置显示位置为第一行的第1个字符
lcd_wdat(Time/10+0x30);
lcd_wdat(Time%10+0x30);
}
}
void M() interrupt 0
{
while(INT0==0);
Time++;
if(Time==100)Time=0;
}追问我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。追答这个需要结合你整体的功能,才能做程序的优化。追问能扣扣聊吗。我就差一点。还在吗
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef bit BOOL;
BYTE Time=0;
sbit LCD_RS = P1^2;
sbit LCD_RW = P1^1;
sbit LCD_EP = P1^3;
delay(int ms)
{ // 延时子程序
int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);
LCD_EP = 0;
return result;
}
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
_nop_();
_nop_();
P2 = cmd;
_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;
P2 = dat;
_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()
{
EX0=1;
EA=1;
lcd_init(); // 初始化LCD
delay(10);
while(1)
{
lcd_wcmd(0x06); //向右移动光标
lcd_pos(0); //设置显示位置为第一行的第1个字符
lcd_wdat(Time/10+0x30);
lcd_wdat(Time%10+0x30);
}
}
void M() interrupt 0
{
while(INT0==0);
Time++;
if(Time==100)Time=0;
}追问我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。追答这个需要结合你整体的功能,才能做程序的优化。追问能扣扣聊吗。我就差一点。还在吗
全部回答
- 1楼网友:長槍戰八方
- 2021-01-24 02:23
具体的功能要求
你还得详细说说
我就可以写了追问我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。追答需要帮你做吗
我的id追问谢谢了。我只差这些就可以弄完全部了,所以希望能帮忙。追答可以的追问嗯,好的。追答丘上说吧
你还得详细说说
我就可以写了追问我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。追答需要帮你做吗
我的id追问谢谢了。我只差这些就可以弄完全部了,所以希望能帮忙。追答可以的追问嗯,好的。追答丘上说吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯