找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3776|回復(fù): 11
收起左側(cè)

為什么12864不能正常顯示自己寫的信息,下面是程序和電路圖

[復(fù)制鏈接]
ID:360050 發(fā)表于 2018-7-4 16:06 | 顯示全部樓層 |閱讀模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB_PORT P0    //液晶數(shù)據(jù)端口DB0-DB7
#define LCD_START_ROW 0xC0  //啟始行命令
#define LCD_PAGE 0xb8    //頁命令
#define LCD_COL 0x04     //列命令
bit Reverse_Display=0;    //是否反相顯示(白底黑字/黑底白字)
char Adjust_Index=-1;   //當(dāng)前調(diào)節(jié)的時(shí)間對(duì)象:秒,分,時(shí),日,月,年
uchar MonthsDays[]={31,0,31,30,31,30,31,31,30,31,30,31};   //一年當(dāng)中的每個(gè)月的天數(shù),二月份由年份決定
uchar DateTime[7];    //所取的日期時(shí)間
void Write_Byte_T0_DS1302(uchar X);  //向1302寫入一個(gè)字方節(jié)
uchar Read_Byte_FROM_DS1302();       //從1302中讀取一個(gè)字節(jié)
uchar Read_Data_FROM_DS1302(uchar addr);  //從1302指定位置讀取數(shù)據(jù)
void Write_Data_T0_DS1302(uchar addr,uchar dat);   //向1302指定位置寫入數(shù)據(jù)
void SET_DS1302();     //設(shè)置時(shí)間
void GetTime();         //讀取當(dāng)前時(shí)間
void DateTime_Adjust(char X);   //年,月,日和時(shí),分++/--
uchar Is_Leapyear(uint year);   //判斷是否為閏年
extern void LCD_12864_Initialization();
extern void Display_char(uchar P1,uchar L1,uchar *M) reentrant;
extern void Dispaly_Word(uchar P2,uchar L2,uchar *M) reentrant;
extern void DateTime_Adjust(char X);
extern void SET_DS1302();    //設(shè)置時(shí)間
extern void GetTime();                     //(extern GetTime)
void Initialization();       //初始化函數(shù)
extern bit Reverse_Display;            //是否反相顯示(白底黑字/黑的白字)
extern uchar code Digits[];           
extern uchar code WEEK_WORDS[];
extern uchar code Digits[];         
extern uchar code DATE_TIME_WORDS[];   
extern char Adjust_Index;  //當(dāng)前調(diào)節(jié)的時(shí)間對(duì)象:秒,分,時(shí),日,月,年(0,1,2,3,4,5,6)
extern uchar Monthsdays[]; //一年中每個(gè)月的天數(shù),二月天數(shù)有年份來決定的
extern uchar DateTime[7]; //所讀取的時(shí)間日期
uchar tcount=0;   //定義
uchar H_Offset=10;
uchar V_page_Offset=0;

sbit RS=P2^0;      //12864引腳定義
sbit RW=P2^1;      //12864引腳定義
sbit E=P2^2;       //12864引腳定義
sbit CS1=P2^3;     //12864引腳定義
sbit CS2=P2^4;     //12864引腳定義
sbit RST=P2^5;     //12864引腳定義
sbit SDA=P1^0;     //1302數(shù)據(jù)線
sbit CLK=P1^1;     //1302時(shí)鐘線
sbit RSTT=P1^2;    //1302復(fù)位線
sbit k1=P3^4;      //選擇案件
sbit k2=P3^5;      //加
sbit k3=P3^6;      //減
sbit k4=P3^7;      //確定

bit LCD_IS_BUSY()//檢查L(zhǎng)CD是否忙
{
     LCD_DB_PORT=0xFF;
         RW=1;
         _nop_();
         RS=0;
         E=1;
          _nop_();
         E=0;
         return (bit)(P0&0x80);
}
void Write_Byte_To_LCD(uchar comand)//向LCD寫入一個(gè)字節(jié)(一般用于發(fā)送命令)
{
    while(LCD_IS_BUSY());
          LCD_DB_PORT=0xFF;
          RW=0;
           _nop_();
          RS=0;
          LCD_DB_PORT=comand;
          E=1;
           _nop_();
          E=0;
}       
void Write_Data_To_LCD(uchar dat)//向LCD寫入數(shù)據(jù)
{
    while(LCD_IS_BUSY());
          LCD_DB_PORT=0xFF;
          RW=0;
           _nop_();
          RS=1;
          if(!Reverse_Display)//根據(jù)Reverse_Display決定是否反向顯示
                   LCD_DB_PORT=dat;
                else
                   LCD_DB_PORT=~dat;
        E=1;
                 _nop_();
                E=0;
}
void LCD12864_Initialization()//初始化LCD
{
      CS1=1;
          CS2=1;
          Write_Byte_To_LCD(0x38);
          Write_Byte_To_LCD(0x0F);
          Write_Byte_To_LCD(0x01);
          Write_Byte_To_LCD(0x06);
          Write_Byte_To_LCD(LCD_START_ROW);
}
void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant
//通用顯示函數(shù)  從第P頁第L列顯示W(wǎng)個(gè)字節(jié)數(shù)據(jù),具體顯示的數(shù)據(jù)在r所指的數(shù)組中
{
    uchar i;
          if(L<64)
                {
                    CS1=1;   //左半屏選中
                        CS2=0;
                        Write_Byte_To_LCD(LCD_PAGE+P);  //頁
                        Write_Byte_To_LCD(LCD_COL+L);   //列
                        if(L+W<64)
                        {
                           for(i=0;i<W;i++)
                                    Write_Data_To_LCD(r[i]);
                        }
                        else
                        {
                           for(i=0;i<64-L;i++)
                                    Write_Data_To_LCD(r[i]);
                                CS1=0;                  //選中右半屏
                                CS2=1;
                                Write_Byte_To_LCD(LCD_PAGE+P);
                            Write_Byte_To_LCD(LCD_COL);
                                for(i=64-L;i<W;i++)
                                    Write_Data_To_LCD(r[i]);
                        }
                }       
                else
                        {
                                CS1=0;
                                CS2=1;
                                Write_Byte_To_LCD(LCD_PAGE+P);
                            Write_Byte_To_LCD(LCD_COL+L-64);
                                for(i=0;i<W;i++)
                                    Write_Data_To_LCD(r[i]);
                }   
}
void Display_char(uchar P1,uchar L1,uchar *M) reentrant//顯示一個(gè)8*16點(diǎn)陣字符   
{
      LCD_Show(P1,L1,8,M);
          LCD_Show(P1+1,L1,8,M+8);
}
void Dispaly_Word(uchar P2,uchar L2,uchar *M) reentrant//顯示一個(gè)16*16點(diǎn)陣字符(漢字上半部分與下半部分分別處在相鄰兩頁中)
{
      LCD_Show(P2,L2,16,M);
          LCD_Show(P2+1,L2,16,M+16);
}

void Write_Byte_T0_DS1302(uchar X)//向DS1302寫入一個(gè)字符
{
    uchar i;
          for(i=0;i<8;i++)
          {
                      SDA=X&1;
                          CLK=1;
                          CLK=0;
                          X>>=1;
                }
}//讀字節(jié)函數(shù),從DS1302讀取一個(gè)字節(jié)
uchar Read_Byte_FROM_DS1302()
{
    uchar i,byte,t;
          for(i=0;i<8;i++)
            {
                    byte>>=1;
                                 t=SDA;
                                byte|=t<<7;
                                CLK=1;
                                CLK=0;
                  }
                  //BCD碼轉(zhuǎn)換
                        return byte/16*10+byte%16;
}
uchar Read_Data_FROM_DS1302(uchar addr)//從DS1302指定位置讀取數(shù)據(jù),讀數(shù)據(jù)
{
      uchar dat;
      RST=0;
      CLK=0;
      RST=1;       
          Write_Byte_T0_DS1302(addr);//向S1302寫入一個(gè)地址
          dat=Read_Byte_FROM_DS1302();//在上面寫入的地址中讀取數(shù)據(jù)
          CLK=1;
          RST=0;
          return dat;
}
void Write_Data_T0_DS1302(uchar addr,uchar dat)//向DS1302指定位置寫入數(shù)據(jù),寫數(shù)據(jù)
{
      CLK=0;
          RST=1;
          Write_Byte_T0_DS1302(addr);
          Write_Byte_T0_DS1302(dat);
          CLK=1;
          RST=0;
}
void SET_DS1302()//設(shè)置時(shí)間
{
      uchar i;
          Write_Data_T0_DS1302(0x8E,0x00);//寫控制字,取消寫保護(hù)
          //分,時(shí),日,月,年依次寫入
          for(i=1;i<7;i++)
          {
          //分的起始地址是10000010(0x82),后面依次是時(shí),日,年,月,周,年,寫入的地址每次遞增2
                        Write_Data_T0_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10));
                }
                   Write_Data_T0_DS1302(0x8E,0x80);//寫控制字,加寫保護(hù)
}
void GetTime()//讀取當(dāng)前時(shí)間
{
    uchar i;
    for(i=0;i<7;i++)
          {
                  DateTime[i]=Read_Data_FROM_DS1302(0x81+2*i);
                }   
}
uchar Is_Leapyear(uint year)//判斷是否為閏年
{
    return (year%4==0&&year%100!=0)||(year%400==0);
}
void Refresh_Week_Day()//求自2000.1.1開始的任何一天是星期幾?
{
    uint i,d,w=5;//已知1999年12.31是星期五
          for(i=2000;i<2000+DateTime[6];i++)//判斷是否為閏年
              {
                                  d=Is_Leapyear(i)?366:365;
                                        w=(w+d)%7;
                                }
                                d=0;
                                for(i=1;i<DateTime[4];i++)
                                    {
                                                  d+=MonthsDays[i];
                                                }
                                d+=DateTime[3];
                                //保存星期,0-6表示星期日,星期一至星期六,為了與DS1302的星期格式匹配,返回值需要加1
        DateTime[5]=(w+d)%7+1;                                               
}
void DateTime_Adjust(char X)//年,月,日和時(shí),分++/--
{
    switch(Adjust_Index)
                {
                        case 6://年調(diào)整,00-99
                                    if(X==1&&DateTime[6]<99)
                                                {
                                                  DateTime[6]++;
                                                }
                                                if(X==-1&&DateTime[6]>0)
                                                {
                                                  DateTime[6]--;
                                                }
                                                MonthsDays[2]=Is_Leapyear(2000+DateTime[6]?29:28);//獲取2月天數(shù)
                                                if(DateTime[3]>MonthsDays[DateTime[4]])//如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限
                                                {
                                                   DateTime[3]=MonthsDays[DateTime[4]];
                                                }
                                                Refresh_Week_Day();//刷新星期
                                                break;
                        case 4://月調(diào)整01-12
                                    if(X==1&&DateTime[4]<12)
                                                {
                                                  DateTime[4]++;
                                                }
                                                if(X==-1&&DateTime[4]>1)
                                                {
                                                  DateTime[4]--;
                                                }
                                                MonthsDays[2]=Is_Leapyear(2000+DateTime[6]?29:28);//獲取2月天數(shù)
                                                if(DateTime[3]>MonthsDays[DateTime[4]])//如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限
                                                {
                                                   DateTime[3]=MonthsDays[DateTime[4]];
                                                }
                                                Refresh_Week_Day();//刷新星期
                                                break;
                        case 3://日調(diào)整00-28或00-29或00-30或00-31
                                    MonthsDays[2]=Is_Leapyear(2000+DateTime[6]?29:28);//調(diào)節(jié)之前首先根據(jù)當(dāng)前年份得出該年中2月的天數(shù)
                                    if(X==1&&DateTime[3]<MonthsDays[DateTime[4]])//根據(jù)當(dāng)前月份決定調(diào)節(jié)日期的上限
                                                {
                                                  DateTime[3]++;
                                                }
                                                if(X==-1&&DateTime[3]>0)
                                                {
                                                  DateTime[3]--;
                                                }
                                                Refresh_Week_Day();//刷新星期
                                                break;               
            case 2://時(shí)調(diào)整
                                    if(X==1&&DateTime[2]<23)
                                                {
                                                  DateTime[2]++;
                                                }
                                                if(X==-1&&DateTime[4]>0)
                                                {
                                                  DateTime[2]--;
                                                }
                                                break;       
     case 1://分調(diào)整
                                    if(X==1&&DateTime[1]<59)
                                                {
                                                  DateTime[1]++;
                                                }
                                                if(X==-1&&DateTime[4]>0)
                                                {
                                                  DateTime[1]--;
                                                }
                                                break;       
            case 0://秒調(diào)整
                                    if(X==1&&DateTime[1]<59)
                                                {
                                                  DateTime[0]++;
                                                }
                                                if(X==-1&&DateTime[4]>0)
                                                {
                                                  DateTime[0]--;
                                                }
                                                break;                                       
                }
}
//年,月,日,星期,時(shí),分,秒等漢字點(diǎn)陣(16*16)
uchar code DATE_TIME_WORDS[]={
//年
0x00,0x04,0x18,0xE3,0x22,0x22,0x22,0x22,0x3F,0x22,0x22,0x22,0x22,0x20,0x00,0x00,
0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
//月
0x00,0x00,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,0x00,
0x01,0x02,0x0C,0xF0,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x41,0xFE,0x00,0x00,0x00,
//日
0x00,0x00,0x00,0x7F,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x7F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x00,0x00,0x00,0x00,
//星
0x00,0x00,0x00,0x7D,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x7C,0x00,0x00,0x00,0x00,
0x00,0x22,0x42,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x82,0x02,0x00,0x00,
//期
0x00,0x20,0xFF,0x24,0x24,0x24,0xFF,0x20,0x00,0x7F,0x44,0x44,0x44,0x7F,0x00,0x00,
0x11,0x12,0xF4,0x90,0x90,0x98,0xF5,0x12,0x0C,0xF0,0x40,0x42,0x41,0xFE,0x00,0x00,
//時(shí)
0x00,0x3F,0x21,0x21,0x21,0x3F,0x00,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x00,
0x00,0xFC,0x08,0x08,0x08,0xFC,0x00,0x00,0x80,0x60,0x02,0x01,0xFE,0x00,0x00,0x00,
//分
0x01,0x02,0x04,0x09,0x11,0x61,0x01,0x01,0x01,0xC1,0x31,0x08,0x04,0x02,0x01,0x00,
0x00,0x01,0x02,0x04,0x18,0xE0,0x00,0x02,0x01,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,
//秒
0x24,0x24,0x25,0x7F,0xC4,0x44,0x00,0x03,0x1C,0x00,0xFF,0x00,0x10,0x08,0x06,0x00,
0x10,0x60,0x80,0xFF,0x80,0x60,0x81,0x01,0x02,0x02,0xE4,0x08,0x30,0xC0,0x00,0x00,  
};
//一,二,三,四,五,六和天等漢字點(diǎn)陣16*16)
uchar code WEEK_WORDS[]={
/*--  文字:  天  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x02,0x02,0x42,0x42,0x42,0x42,0x42,0x7F,0x42,0x42,0x42,0x42,0x42,0x02,0x02,0x00,
0x01,0x01,0x02,0x04,0x08,0x30,0xC0,0x00,0xC0,0x30,0x08,0x04,0x02,0x01,0x01,0x00,

/*--  文字:  一  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  二  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,

/*--  文字:  三  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x00,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x00,0x00,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

/*--  文字:  四  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x00,0x3F,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x3F,0x00,0x00,
0x00,0xFE,0x14,0x24,0xC4,0x04,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0xFE,0x00,0x00,

/*--  文字:  五  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x00,0x40,0x42,0x42,0x42,0x43,0x7E,0x42,0x42,0x42,0x42,0x43,0x40,0x40,0x00,0x00,
0x02,0x02,0x02,0x02,0x1E,0xE2,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x00,

/*--  文字:  六  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16   --*/
0x04,0x04,0x04,0x04,0x04,0x04,0x84,0x44,0x34,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x00,0x02,0x04,0x08,0x30,0xC0,0x00,0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x00,0x00,
};
uchar code Digits[]={
/*--  文字:  0  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,

/*--  文字:  1  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,

/*--  文字:  2  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x0E,0x10,0x10,0x10,0x10,0x0F,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,

/*--  文字:  3  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x0C,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x18,0x04,0x84,0x84,0x44,0x38,0x00,

/*--  文字:  4  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x00,0x01,0x02,0x0C,0x1F,0x00,0x00,0x00,0x60,0xA0,0x24,0x24,0xFC,0x24,0x24,

/*--  文字:  5  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x1F,0x11,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x04,0x04,0x04,0x88,0x70,0x00,

/*--  文字:  6  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x07,0x08,0x11,0x11,0x09,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x04,0xF8,0x00,

/*--  文字:  7  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x18,0x10,0x10,0x11,0x16,0x18,0x00,0x00,0x00,0x00,0x7C,0x80,0x00,0x00,0x00,

/*--  文字:  8  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,

/*--  文字:  9  --*/
/*--  宋體12;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x0F,0x10,0x10,0x10,0x08,0x07,0x00,0x00,0x80,0x48,0x44,0x44,0x88,0xF0,0x00,
};
void main()//主程序
{
        Initialization();
        while(1)
        {
            if(Adjust_Index==-1) GetTime();
        }
}
void Initialization()//初始化函數(shù)
{
    IE=0x83;
        IP=0x01;
        IT0=0x01;
        TH0=-50000/256;//寫入初值
        TL0=-50000%256;//寫入初值
        TR0=1;         //送顯
        LCD12864_Initialization();//液晶初始化函數(shù)
        //顯示年的前面固定的兩位
        Display_char(V_page_Offset,0+H_Offset,Digits+0*16);
    Display_char(V_page_Offset,8+H_Offset,Digits);   
    //在12864屏幕上固定顯示漢字:年月日,星期,時(shí)分秒
        Dispaly_Word(V_page_Offset,32+H_Offset,DATE_TIME_WORDS+0*32);      //年
        Dispaly_Word(V_page_Offset,64+H_Offset,DATE_TIME_WORDS+1*32);      //月
        Dispaly_Word(V_page_Offset,96+H_Offset,DATE_TIME_WORDS+2*32);      //日
        Dispaly_Word(V_page_Offset+3,56+H_Offset,DATE_TIME_WORDS+3*32);    //星
        Dispaly_Word(V_page_Offset+3,22+H_Offset,DATE_TIME_WORDS+4*32);    //期
        Dispaly_Word(V_page_Offset+6,38+H_Offset,DATE_TIME_WORDS+5*32);    //時(shí)
        Dispaly_Word(V_page_Offset+6,70+H_Offset,DATE_TIME_WORDS+6*32);    //分
        Dispaly_Word(V_page_Offset+6,102+H_Offset,DATE_TIME_WORDS+7*32);   //秒
}

void T0_INT()interrupt 1//定時(shí)器0刷新LCD顯示函數(shù)
{
    TH0=-50000/256;//寫入初值
        TL0=-50000%256;//寫入初值
        if(++tcount!=2) return;
             tcount=0;              

//年(后兩位)
Reverse_Display=Adjust_Index==6;
Display_char(V_page_Offset,16+H_Offset,Digits+DateTime[6]/10*16);
Display_char(V_page_Offset,24+H_Offset,Digits+DateTime[6]/10*16);
//星期
Reverse_Display=Adjust_Index==5;
Dispaly_Word(V_page_Offset+3,96+H_Offset,WEEK_WORDS+(DateTime[5]%10-1)*32);
//月
Reverse_Display=Adjust_Index==4;
Display_char(V_page_Offset,48+H_Offset,Digits+DateTime[4]/10*16);
Display_char(V_page_Offset,56+H_Offset,Digits+DateTime[4]%10*16);
//日
Reverse_Display=Adjust_Index==3;
Display_char(V_page_Offset,80+H_Offset,Digits+DateTime[3]/10*16);
Display_char(V_page_Offset,88+H_Offset,Digits+DateTime[3]%10*16);
//時(shí)
Reverse_Display=Adjust_Index==2;
Display_char(V_page_Offset+6,16+H_Offset,Digits+DateTime[2]/10*16);
Display_char(V_page_Offset+6,24+H_Offset,Digits+DateTime[2]%10*16);
//分
Reverse_Display=Adjust_Index==1;
Display_char(V_page_Offset+6,48+H_Offset,Digits+DateTime[1]/10*16);
Display_char(V_page_Offset+6,56+H_Offset,Digits+DateTime[1]%10*16);
//秒
Reverse_Display=Adjust_Index==0;
Display_char(V_page_Offset+6,80+H_Offset,Digits+DateTime[0]/10*16);
Display_char(V_page_Offset+6,88+H_Offset,Digits+DateTime[0]%10*16);   
}

void EX_INT0()interrupt 0//鍵盤中斷處理函數(shù)
{
if(k1==0)
{
if(Adjust_Index==-1||Adjust_Index==-1)
//  {Adjust_Index==7;}
Adjust_Index--;
if(Adjust_Index==5)
{Adjust_Index=4;}//跳過對(duì)星期的調(diào)節(jié)
}
else if(k2==0)//加
{
DateTime_Adjust(1);
}
else if(k3==0)//減
{
DateTime_Adjust(-1);
}
else if(k4==0)
{
SET_DS1302();
Adjust_Index=-1;//操作索引重設(shè)為-1,時(shí)間繼續(xù)正常顯示
}
}

做的是個(gè)萬年歷,本該顯示時(shí)間,年月日,星期幾就是顯不出來,哪位大佬知道改怎么改嗎?

做的是個(gè)萬年歷,本該顯示時(shí)間,年月日,星期幾就是顯不出來,哪位大佬知道改怎么改嗎?
回復(fù)

使用道具 舉報(bào)

ID:361354 發(fā)表于 2018-7-4 16:46 | 顯示全部樓層
仿真圖12864的vcc   gnd都沒接   調(diào)亮度的vo也沒接

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:360050 發(fā)表于 2018-7-5 12:12 | 顯示全部樓層
莫名我喜歡你 發(fā)表于 2018-7-4 16:46
仿真圖12864的vcc   gnd都沒接   調(diào)亮度的vo也沒接

還是不對(duì),連上之后還是一樣,問老師,解釋電路圖沒有問題,就是程序有問題
回復(fù)

使用道具 舉報(bào)

ID:15207 發(fā)表于 2018-7-5 15:14 | 顯示全部樓層
這個(gè)是沒有做庫吧,12864要有庫才能顯示漢字呀
回復(fù)

使用道具 舉報(bào)

ID:360050 發(fā)表于 2018-7-5 16:28 | 顯示全部樓層
gesang 發(fā)表于 2018-7-5 15:14
這個(gè)是沒有做庫吧,12864要有庫才能顯示漢字呀

前面做的能顯示
回復(fù)

使用道具 舉報(bào)

ID:227956 發(fā)表于 2018-7-6 11:57 | 顯示全部樓層
不太明白
回復(fù)

使用道具 舉報(bào)

ID:331760 發(fā)表于 2018-7-6 14:21 | 顯示全部樓層
莫名我喜歡你 發(fā)表于 2018-7-4 16:46
仿真圖12864的vcc   gnd都沒接   調(diào)亮度的vo也沒接

瞎說  仿真測(cè)試可以不接
回復(fù)

使用道具 舉報(bào)

ID:366304 發(fā)表于 2018-7-6 14:58 | 顯示全部樓層
顯示模塊出問題了吧
回復(fù)

使用道具 舉報(bào)

ID:137692 發(fā)表于 2018-7-6 15:16 | 顯示全部樓層
一般顯示問題都是初始化和接口問題比較大!
回復(fù)

使用道具 舉報(bào)

ID:212089 發(fā)表于 2018-7-6 17:39 | 顯示全部樓層
12864是那個(gè)牌子的?看資料,有的沒有中文字庫?纯凑f明書有沒有帶字庫,出現(xiàn)問題之后要先想到看說明書。這樣可以事半功倍。
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-7-7 15:37 | 顯示全部樓層
本帖最后由 zl2168 于 2018-7-7 15:38 編輯

LCD12864顯示屏顯示漢字
⒈ AMPIRE 12864LCD顯示屏簡(jiǎn)介
⑴ 引腳功能    …
⑵ 顯示屏數(shù)據(jù)結(jié)構(gòu)    …
⒉ 漢字編碼
⑴ 漢字編碼概述    …
⑵ 漢字點(diǎn)陣顯示代碼    …
⑶ 漢字點(diǎn)陣取模軟件    …
⒊ 電路和應(yīng)用程序    …
⒋ Keil調(diào)試    …
⒌ Proteus仿真    …
Proteus仿真一下,確認(rèn)有效。
實(shí)驗(yàn)25 LCD12864顯示屏顯示.rar (60.48 KB, 下載次數(shù): 6)
12864.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行,可演示,可觀測(cè),程序語句條條有注解。
回復(fù)

使用道具 舉報(bào)

ID:360050 發(fā)表于 2018-7-7 19:28 | 顯示全部樓層
zl2168 發(fā)表于 2018-7-7 15:37
LCD12864顯示屏顯示漢字
⒈ AMPIRE 12864型LCD顯示屏簡(jiǎn)介⑴ 引腳功能    …
⑵ 顯示屏數(shù)據(jù)結(jié)構(gòu)    …

沒用   我有100例案
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表