标题:
lcd1602,数码管,点阵
[打印本页]
作者:
晚年安好
时间:
2017-3-31 20:26
标题:
lcd1602,数码管,点阵
亚龙操作,lcd和数码管点阵显示时间,但是lcd和数码管点阵时间不同步,总是慢1秒。求解、
#include<reg52.h>
#define uc unsigned char
#define ui unsigned int
#define it interrupt
sbit cs1=P2^0;
sbit cs2=P2^1;
sbit wr=P2^2;
sbit rs=P2^3;
sbit rw=P2^4;
sbit e=P2^5;
sbit dz_row0=P3^0;
sbit dz_row1=P3^1;
sbit dz_col0=P3^2;
sbit dz_col1=P3^3;
sbit dz_col2=P3^4;
sbit dz_col3=P3^5;
uc duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uc smg_buf[8];
uc smg_i=0;
uc code sj[][16]={
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,
0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,
0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uc dz_buf[4];
uc dz_i=0;
ui san_i=0;
uc xsr[]={0x32,0x30,0x31,0x37,0x2d,0x30,0x33,0x2d,0x33,0x31};
uc xss[]={0x30,0x30,0x2d,0x30,0x30,0x2d,0x30,0x30};
uc shi=0,fen=0,miao=0;
void delay(ui x){while(x--);}
void mang()
{
rs=0;
rw=1;
e=1;
P1=0xff;
while(P1&0x80);
e=0;
}
void xml(uc dat)
{
mang();
rs=0;
rw=0;
P1=dat;
e=1;
e=0;
}
void xsj(uc dat)
{
mang();
rs=1;
rw=0;
P1=dat;
e=1;
e=0;
}
void lcd1602_zfc(uc row,col,num,uc *buf)
{
uc i=0;
xml(row+col);
for(i=0;i<num;i++)
xsj(buf[i]);
}
void lcd1602_init()
{
xml(0x38);
xml(0x0c);
xml(0x06);
xml(0x01);
}
void lcd1602()
{
lcd1602_zfc(128,3,10,xsr);
lcd1602_zfc(192,4,8,xss);
xss[0]=shi/10+48;
xss[1]=shi%10+48;
xss[3]=fen/10+48;
xss[4]=fen%10+48;
xss[6]=miao/10+48;
xss[7]=miao%10+48;
}
void dz_tobuf()
{
dz_buf[0]=sj[shi/10][dz_i];
dz_buf[1]=sj[shi%10][dz_i];
if(dz_i==4||dz_i==5||dz_i==12||dz_i==13)
{
if(san_i>1000)
dz_buf[1]=dz_buf[1]|0x80;
}
dz_buf[2]=sj[fen/10][dz_i];
if(dz_i==4||dz_i==5||dz_i==12||dz_i==13)
{
if(san_i>1000)
dz_buf[2]=dz_buf[2]|0x01;
}
dz_buf[3]=sj[fen%10][dz_i];
}
void DZ()
{
dz_tobuf();
P0=0x00;
dz_row0=dz_row1=dz_col0=dz_col1=dz_col2=dz_col3=1;
dz_row0=dz_row1=dz_col0=dz_col1=dz_col2=dz_col3=0;
P0=(0x0001<<dz_i)%256;dz_row0=1;dz_row0=0;
P0=(0x0001<<dz_i)/256;dz_row1=1;dz_row1=0;
P0=dz_buf[0];dz_col0=1;dz_col0=0;
P0=dz_buf[1];dz_col1=1;dz_col1=0;
P0=dz_buf[2];dz_col2=1;dz_col2=0;
P0=dz_buf[3];dz_col3=1;dz_col3=0;
dz_i++;
if(dz_i>=16)
dz_i=0;
}
void smg_tobuf()
{
smg_buf[7]=shi/10;
smg_buf[6]=shi%10;
smg_buf[5]=10;
smg_buf[4]=fen/10;
smg_buf[3]=fen%10;
smg_buf[2]=10;
smg_buf[1]=miao/10;
smg_buf[0]=miao%10;
}
void SMG()
{
smg_tobuf();
cs1=cs2=0;
P0=0xff;
wr=1;wr=0;
cs1=1;cs2=0;
P0=~(0x01<<smg_i);
wr=1;wr=0;
cs1=0;cs2=1;
P0=duan[smg_buf[smg_i]];
wr=1;wr=0;
smg_i++;
if(smg_i>=8)
smg_i=0;
}
void init()
{
TMOD=0x01;
TH0=65036/256;
TL0=65036%256;
ET0=TR0=EA=1;
}
void main()
{
delay(2000);
init();
lcd1602_init();
while(1)
{
lcd1602();
}
}
ui t0i=0,t01i=0;
void t0() it 1
{
TH0=65036/256;
TL0=65036%256;
SMG();
DZ();
t0i++;
if(t0i>=2000)
{
t0i=0;
miao++;
if(miao>=60)
{
miao=0;
fen++;
if(fen>=60)
{
fen=0;
shi++;
if(shi>=24)
shi=0;
}
}
}
san_i++;
if(san_i>=2000)
san_i=0;
}
作者:
低调的犀利
时间:
2017-11-18 15:43
楼主 你能告诉我数码管WR写入使能怎么写吗 谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1