本学期我参加了一个微控制器课程,我有一个使用PIC18制作数字时钟并在LCD上显示的任务。我的代码是用C语言编写的,我可以用来模拟。
我写了一段代码,但是如果有人能帮助我搞清楚我的错误,那就错了。 谢谢
#include <P18F4580.h>
#define ldata PORTD
#define rs PORTBbits.RB0
#define rw PORTBbits.RB1
#define en PORTBbits.RB2
void msdelay(unsigned int itime)
{ unsigned int i,j;
for (i=0; i<itime; i++)
for (j=0; j<135; j++);
}
void lcdcmd(unsigned char value)
{ ldata = value;
rs = 0;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
void lcddata(unsigned char value)
{ ldata = value;
rs = 1;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
void main()
{
TRISD = 0;
TRISB = 0;
en = 0;
int msCounter =0;
int secCounter =0;
int minCounter =0;
int hrCounter =0;
msdelay(15);
lcdcmd(0x01); //Clear display
msdelay(15);
lcdcmd(0x02); //Home cursor
msdelay(15);
lcdcmd(0x06); //Left to right, still
msdelay(250);
lcdcmd(0x0E); //display cursor
msdelay(250);
lcdcmd(0x3C); //5x10 2 lines
msdelay(15);
lcdcmd(0x86);
while(1)
{
msdelay(15);
lcdcmd(0x08);
lcddata(secCounter);
msdelay(15);
msCounter++;
if (msCounter==1000)
{secCounter++; msCounter=0; }
if (secCounter==60)
{minCounter++; secCounter=0; }
if (minCounter==60)
{hrCounter++; minCounter=0; }
if (hrCounter==24)
{hrCounter=0; }
msdelay(15);
lcddata(hrCounter);
msdelay(15);
lcddata(':');
msdelay(15);
lcddata(minCounter);
msdelay(15);
lcddata(':');
msdelay(15);
lcddata(secCounter);
}
}
答案 0 :(得分:0)
使用7段显示器比使用LCD更好地显示数字时钟。
答案 1 :(得分:0)
在您的程序中使用此代码并检查... 对于 lcddata(mscounter);
use *thous(mscounter);*
在代码中声明并检查 lcdcmd(0×08);改为使用 lcdcmd(0x80的);
void thous(unsigned int count)
{
lcddata((count/1000)+0x30);
lcddata(((count/100)%10)+0x30);
lcddata(((count%100)/10)+0x30);
lcddata((count%10)+0x30);
}