找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2277|回复: 1
打印 上一主题 下一主题
收起左侧

lcd1602,数码管,点阵

[复制链接]
跳转到指定楼层
楼主
ID:185194 发表于 2017-3-31 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
亚龙操作,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;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:250096 发表于 2017-11-18 15:43 来自触屏版 | 只看该作者
楼主  你能告诉我数码管WR写入使能怎么写吗  谢谢
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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