#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 = 0i<250i++)
{
_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
}
你这是实物开发板,还是仿真图呀。那P01脚接按键,要加上拉电阻的。估计是没有上拉电阻的原因。
还有程序有问题,if(0==K1) ,这是K1,可是while(0==K2),这却是K2,这不相同的。
另外,写程序要规范,要写成if(K1==0),这才是标准的写法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)