OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7607|回复: 6

LCD命令函数

[复制链接]

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
发表于 2012-4-8 18:51:33 | 显示全部楼层 |阅读模式

void write_cmd(uchar cmd)

 LCD_RS=0;
 LCD_RW=0;
 LCD_EN=0;
 0=cmd;
 delay(5);
 LCD_EN=1;
 delay(5);
 LCD_EN=0;
}

为什么这个函数从第一句执行后,不执行下一句,而是直接跳到倒数第二句了,求解。。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-4-8 19:39:07 | 显示全部楼层
有可能是編譯器優化的結果,你繼續執行看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2011-11-21
在线时间
32 小时
发表于 2012-4-9 14:14:43 | 显示全部楼层
可以写数据吗?如果可以就无需理会
回复 支持 反对

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
 楼主| 发表于 2012-4-9 22:01:29 | 显示全部楼层
回复【3楼】六画玄辉:
---------------------------------
奇怪的是数据函数也是这样,LCD根本不能初始化
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-4-10 00:05:29 | 显示全部楼层
回复【4楼】山峰雪狼:
---------------------------------
那就真奇怪了.全编译试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
 楼主| 发表于 2012-4-12 20:34:51 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_date 0//数据口
sbit LCD_RS=P3^5;//寄存器选择入口
sbit LCD_RW=P3^6;//液晶读/写控制
sbit LCD_EN=P3^4;//液晶使能控制
sbit LCD_PSB=P3^7;//串/并方式选择
uchar code dis2[]={"0123456789"};
uchar  key;
/**********************************
//延时函数
**********************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************
//写指令数据到LCD
//RS=L;RW=L;E=高脉冲,D0-D7=指令码。
*************************************/
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
/*************************************
//写数据都LCD
//RS=H;RW=L;E=高脉冲,D0-D7=数据。
************************************/
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
/***********************************
//设定显示位置
***********************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
pos=X+Y;
write_cmd(pos);//显示地址
}
/************************************
//LCD初始化
************************************/
void lcd_init()
{
LCD_PSB=1;
write_cmd(0x30);//基本操作指令
delay(5);
write_cmd(0x0e);//显示开,开光标
delay(5);
write_cmd(0x01);//清除显示内容
delay(5);
}
/***********************************
//显示函数
***********************************/
void display_num(uchar y)
{

lcd_pos(0,0);//设置显示位置为第1行的第一个字符
switch(y){
case 0: write_dat(dis2[0]);//显示字符0
break;
case 1: write_dat(dis2[1]);//显示字符1
break;
case 2: write_dat(dis2[2]);//显示字符2
break;
case 3: write_dat(dis2[3]);//显示字符3
break;
case 4: write_dat(dis2[4]);//显示字符4
break;
case 5: write_dat(dis2[5]);//显示字符5
break;
case 6: write_dat(dis2[6]);//显示字符6
break;
case 7: write_dat(dis2[7]);//显示字符7
break;
case 8: write_dat(dis2[8]);//显示字符8
break;
case 9: write_dat(dis2[9]);//显示字符9
break;

}
}
/***********************************
//键盘扫描
************************************/
void keyscan()
{
uchar temp;
uchar num;
while(1)
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(22);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=0;
break;
case 0xd0:num=1;
break;
case 0xb0:num=2;
break;
case 0x70:num=3;
break;
}
}
while(temp!=0xf0)//键盘松开去抖动 
{
temp=P1;
temp=temp&0xf0;
}
display_num(num);
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(22);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=4;
break;
case 0xd0:num=5;
break;
case 0xb0:num=6;
break;
case 0x70:num=7;
break;
}
}
while(temp!=0xf0)//键盘松开去抖动 
{
temp=P1;
temp=temp&0xf0;
}
display_num(num);
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(22);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=8;
break;
case 0xd0:num=9;
break;
case 0xb0:num=10;
break;
case 0x70:num=11;
break;
}
}
while(temp!=0xf0)//键盘松开去抖动 
{
temp=P1;
temp=temp&0xf0;
}
display_num(num);
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(22);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=12;
break;
case 0xd0:num=13;
break;
case 0xb0:num=14;
break;
case 0x70:num=15;
break;
}
}
while(temp!=0xf0)//键盘松开去抖动 
{
temp=P1;
temp=temp&0xf0;
}
}
display_num(num);
}
}

/***********************************
//主函数
***********************************/
void main()
{
lcd_init();//初始化

while(1){
keyscan();
}

}









回复 支持 反对

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
 楼主| 发表于 2012-4-12 20:35:26 | 显示全部楼层
求解。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表