#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
}
1、首先举掘喊我们打散猜开KeilμVision编译器,新建一个工程正野,然后保存在硬盘上的位置。2、其次导入51单片机的头文件以及LCD1602的头文件。创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。
3、最后最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。
table=key()//扫描键盘这table是一个数组吗,这么写就不对了,应该唯旦氏是
table[i]=key()
这函数key()返回数值是多少,是一位数还是几位数?
这行是写数据到液晶屏吗
writedate(table[j])//液晶屏显示
这里用到了数组了,与前面table=key()不一致了
如果真是数组的话迟差,写到液晶屏的数据需要变成ASCII码,才能显示
应该这样
writedate(table[j]+ox30)/指散/液晶屏显示
但这只适合table[i]=key()是一位数的
要是多位数,还要分别取出个十百千位各位数,并分别转换成ASCII码,再分别写到液晶屏。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)