3个回答
展开全部
具体要求是什么,可以帮你完成。使用外部中断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;
}
更多追问追答
追问
我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。
追答
这个需要结合你整体的功能,才能做程序的优化。
展开全部
利用矩阵键盘同时控制LED小灯和LCD屏幕。当矩阵键盘摁下某个数字时,LCD屏幕就会显示摁下的数字,同时LED以二进制的形式亮灭
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
具体的功能要求
你还得详细说说
我就可以写了
你还得详细说说
我就可以写了
更多追问追答
追问
我就是做个万年历和温度传感器,并显示出来,但要有按键输入一定的温度(即恒温)当输入温度和温度传感器探测的温度不一致时报警器就响,然后继电器就开始工作。
追答
需要帮你做吗
我的id
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询