找回密码
 立即注册

QQ登录

只需一步,快速开始

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

12864串行显示方式

[复制链接]
跳转到指定楼层
楼主
ID:374056 发表于 2018-7-18 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>

#define uchar unsigned char
#define uint  unsigned int
sbit CS  = P1^0;  //RS
sbit SID = P1^1;  //RW
sbit SCK = P1^2;  //E
uchar code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,    //???????  
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,    //???????  
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,    //???????
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,    //???????
};




#define WS 0x80
#define WMi 0x82
#define WH 0x84
#define WD 0x86
#define WMo 0x88
#define WW 0x8A
#define WY 0x8C
#define WP 0x8E

#define RS 0x81
#define RMi 0x83
#define RH 0x85
#define RD 0x87
#define RMo 0x89
#define RW 0x8B
#define RY 0x8D
#define RP 0x8F

uchar sec,min,hour,day,mon,week,year;

sbit SCLK = P3^5;
sbit DIO = P3^6;
sbit RST = P3^7;

void InitDS1302();
uchar DS1302Read(uchar cmd);
void DS1302Write(uchar cmd,uchar dat);
void DS1302WriteByte(uchar dat);
uchar DS1302ReadByte();
void ReadTime();
void display();
void delay();




uchar code tables[]={0x77,0x14,0xb3,0xb6,0xd4,0xe6,0xe7,0x34,0xf7,0xf6,0x80,0x00};






/******************************** ????    :SendByte  ????????*****/
void SendByte(uchar Dbyte)
{
     uchar i;
     for(i=0;i<8;i++)
     {
           SCK = 0;
           Dbyte=Dbyte<<1;     
           SID = CY;           
           SCK = 1;
           SCK = 0;
     }
}

/***********??????***/
uchar ReceiveByte(void)
{
     uchar i,temp1,temp2;
     temp1 = 0;
     temp2 = 0;
     for(i=0;i<8;i++)
     {
           temp1=temp1<<1;
           SCK = 0;
           SCK = 1;            
           SCK = 0;
           if(SID) temp1++;
     }
     for(i=0;i<8;i++)
     {
           temp2=temp2<<1;
           SCK = 0;
           SCK = 1;
           SCK = 0;
           if(SID) temp2++;
     }
     return ((0xf0&temp1)+(0x0f&temp2));
}

void CheckBusy( void )
{
     do   SendByte(0xfc);      
     while(0x80&ReceiveByte());   
}

void WriteCommand(uchar Cbyte )
{
     CS = 1;
     CheckBusy();
     SendByte(0xf8);            
     SendByte(0xf0&Cbyte);     
     SendByte(0xf0&Cbyte<<4);
     CS = 0;
}

void WriteData(uchar Dbyte )
{
     CS = 1;
     CheckBusy();
     SendByte(0xfa);            
     SendByte(0xf0&Dbyte);      
     SendByte(0xf0&Dbyte<<4);
     CS = 0;
}

uchar ReadData( void )
{
     CheckBusy();
     SendByte(0xfe);            
     return ReceiveByte();
}

void Delay(uint MS)
{
     uchar us,usn;
     while(MS!=0)           
      {
         usn = 2;
         while(usn!=0)
          {
            us = 0xf5;
            while (us!=0)
             {
               us--;
             };
            usn--;
           }
         MS--;
      }
}



void LcmInit( void )
{
     WriteCommand(0x30);      
     WriteCommand(0x03);      
     WriteCommand(0x0C);      
     WriteCommand(0x01);      
     WriteCommand(0x06);      
}

void LcmClearTXT( void )
{
     uchar i;
     WriteCommand(0x30);     
     WriteCommand(0x80);      
     for(i=0;i<64;i++)
     WriteData(0x20);
}


void PutStr(uchar row,uchar col,uchar *puts)
{
     WriteCommand(0x30);     
     WriteCommand(AC_TABLE[8*row+col]);   
     while(*puts != '\0')      
     {
           if(col==8)           
           {            
                 col='0';
                 row++;
           }
           if(row==4) row='0';     
           WriteCommand(AC_TABLE[8*row+col]);
           WriteData(*puts);      
           puts++;
           WriteData(*puts);
           puts++;
           col++;
     }
}



void Putchar(uchar row,uchar col,uchar puts)
{
                 uchar a,b,c;
     WriteCommand(0x30);     
     WriteCommand(AC_TABLE[8*row+col]);   
       if(col==8)           
           {            
                 col='0';
                 row++;
           }
           if(row==4) row='0';     
           WriteCommand(AC_TABLE[8*row+col]);
                                        // a=puts/100;
                                         b=puts/10;
                                         c=puts%10;
           WriteData(b);
                                         col++;
                                         WriteData(a);
                                         
}

void DisplayDots(uchar DotByte)
{
     uchar i,j;
     WriteCommand(0x34);     
     WriteCommand(0x36);     
     for(i=0;i<32;i++)           
     {
           WriteCommand(0x80|i);     
           WriteCommand(0x80);     
           for(j=0;j<32;j++)     
           {            
              WriteData(DotByte);                  
           }
           DotByte=~DotByte;
     }
}

uchar str0[]="2001-07-01";
uchar str1[]="12:11:11";
void main( void )
{
     Delay(100);   
                 //InitDS1302();
     LcmInit();
     LcmClearTXT();
     while(1)
     {
                                ReadTime();;
                                str0[2] = year/10+48;
                          str0[3] = year%10+48;
                          str0[5] = mon/10+48;
                          str0[6] = mon%10+48;
                          str0[8] = day/10+48;
                          str0[9] = day%10+48;
                          str1[0] = hour/10+48;
                          str1[1] = hour%10+48;
                          str1[3] = min/10+48;
                          str1[4] = min%10+48;
                          str1[6] = sec/10+48;
                          str1[7] = sec%10+48;
              PutStr(2,0,str1);
        PutStr(3,0,str0);
     }
}




uchar DS1302Read(uchar cmd){
        uchar dat;
        RST = 0;
        SCLK = 0;
        RST = 1;
        DS1302WriteByte(cmd);
        dat = DS1302ReadByte();
        SCLK = 1;
        RST = 0;
        return dat;
}

void DS1302Write(uchar cmd,uchar dat){
        RST = 0;
        SCLK = 0;
        RST =1;
        DS1302WriteByte(cmd);
        DS1302WriteByte(dat);
        SCLK = 1;
        RST = 0;
}

void DS1302WriteByte(uchar dat){
        uchar i;
        SCLK = 0;
        for(i=0;i<8;i++){
                DIO = dat&0x01;
                SCLK = 1;
                SCLK = 0;
                dat>>=1;
        }
}

uchar DS1302ReadByte(){
        uchar i,dat;
        for(i=0;i<8;i++){
                dat>>=1;
                if(DIO==1)dat|=0x80;
                SCLK = 1;
                SCLK = 0;
        }
        return dat;
}

void InitDS1302(){
        DS1302Write(WP,0x00);
        DS1302Write(WS,0x80);
        DS1302Write(WMi,0x10);
        DS1302Write(WH,0x10);
        DS1302Write(WD,0x17);
        DS1302Write(WMo,0x07);
        DS1302Write(WW,0x02);
        DS1302Write(WY,0x18);
        DS1302Write(WS,0x00);
        DS1302Write(WP,0x80);
}

void ReadTime(){
        uchar temp;
        temp = DS1302Read(RS);
        sec = (temp&0x0F)+((temp&0x70)>>4)*10;
        temp =DS1302Read(RMi);
        min = (temp&0x0F)+((temp&0x70)>>4)*10;
        temp =DS1302Read(RH);
        hour = (temp&0x0F)+((temp&0x30)>>4)*10;
        temp =DS1302Read(RD);
        day = (temp&0x0F)+((temp&0x30)>>4)*10;
        temp =DS1302Read(RMo);
        mon = (temp&0x0F)+((temp&0x10)>>4)*10;
        temp =DS1302Read(RW);
        week = temp&0x07;
        temp =DS1302Read(RY);
        year = (temp&0x0F)+(temp>>4)*10;
}


void display(){
        SBUF = tables[sec%10];
        while(!TI);
        TI = 0;
        SBUF = tables[sec/10];
        while(!TI);
        TI = 0;
        SBUF = tables[day%10];
        while(!TI);
        TI = 0;
        SBUF = tables[day/10];
        while(!TI);
        TI = 0;
        SBUF = tables[mon%10];
        while(!TI);
        TI = 0;
        SBUF = tables[mon/10];
        while(!TI);
        TI = 0;
        SBUF = tables[year%10];
        while(!TI);
        TI = 0;
        SBUF = tables[year/10];
        while(!TI);
        TI = 0;
}


void delay(){
        unsigned int i,j;
        for(i=0;i<1000;i++){
                for(j=0;j<333;j++);
        }
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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