发表于:2011/9/12 20:11:27
#0楼
请教下各位:
1602液显显示:我的想法是在两行液显上,在指定的位置在条件不同时显示不同的数。如在第一行中间的位置,在按键按下时,显示1,否则显示0。程序怎么写?
我改其它地方的程序如下,只能在第一行第一个字符的地方显示,想让它在第一行中间显示不知该怎么写程序了
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
unsigned int hour,minute,second,count;
sbit RS = P2^4;//Pin4
sbit RW = P2^5; //Pin5
sbit E = P2^6;//Pin6
sbit ss=P3^3;
#define Data P0 //数据端口
char data TimeNum[]=" ";
char data Test1[]=" ";
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
{
DelayUs(100);
DelayUs(100);
DelayUs(100);
DelayUs(100);
}
}
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc
else
p=pos+0x80; //是第二行则命令代码高4位为0x8
WriteCommand (p);//write command
WriteData (c); //write data
}
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<2;
for (i=0;i<5;i++)
ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0e); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
/////////////////////////////////////////////////////////////////
void main(void)
{
while(1)
{
InitLcd();//
// DelayMs(1);
WriteData(''.'');
if(ss==0)
{
WriteData(''R'');//只能在第一行的第一个字符处显示,如何移动到中间去显示,该怎么写?
}
}
}
1602液显显示:我的想法是在两行液显上,在指定的位置在条件不同时显示不同的数。如在第一行中间的位置,在按键按下时,显示1,否则显示0。程序怎么写?
我改其它地方的程序如下,只能在第一行第一个字符的地方显示,想让它在第一行中间显示不知该怎么写程序了
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
unsigned int hour,minute,second,count;
sbit RS = P2^4;//Pin4
sbit RW = P2^5; //Pin5
sbit E = P2^6;//Pin6
sbit ss=P3^3;
#define Data P0 //数据端口
char data TimeNum[]=" ";
char data Test1[]=" ";
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
{
DelayUs(100);
DelayUs(100);
DelayUs(100);
DelayUs(100);
}
}
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc
else
p=pos+0x80; //是第二行则命令代码高4位为0x8
WriteCommand (p);//write command
WriteData (c); //write data
}
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<2;
for (i=0;i<5;i++)
ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0e); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
/////////////////////////////////////////////////////////////////
void main(void)
{
while(1)
{
InitLcd();//
// DelayMs(1);
WriteData(''.'');
if(ss==0)
{
WriteData(''R'');//只能在第一行的第一个字符处显示,如何移动到中间去显示,该怎么写?
}
}
}
[此贴子已经被作者于2011/9/12 20:12:31编辑过]