久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4977|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

12864驅(qū)動(dòng)的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94431 發(fā)表于 2015-12-29 14:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
UC1701x的12864和st7567是兼容的,但是為什么我按照st7567寫(xiě)出來(lái)的驅(qū)動(dòng)程序,st7567的液晶不顯示,而UC1701的液晶卻正常顯示,實(shí)在是搞不懂了,哪位大神可以幫忙解答一下?
#include <reg52.H>
#include <intrins.h>     
#include <Ctype.h>
#include<stdio.h>
#include "iic.h"

sbit cs1=P1^1;
sbit reset=P1^0;     
sbit rs=P3^0;
sbit sclk=P3^1;      
sbit sid=P3^2;
sbit Rom_IN=P1^2;    //字庫(kù)IC 接口定義:Rom_IN 就是字庫(kù)IC 的SI
sbit Rom_OUT=P1^3;   //字庫(kù)IC 接口定義:Rom_OUT就是字庫(kù)IC 的SO
sbit Rom_SCK=P1^4;   //字庫(kù)IC 接口定義:Rom_SCK就是字庫(kù)IC 的SCK
sbit Rom_CS=P1^5;    //字庫(kù)IC接口定義Rom_CS就是字庫(kù)IC的CS#

#define uchar unsigned char   
#define uint unsigned int
#define ulong unsigned long
char xianshi[5];
int court=0;
uchar p;/*記錄按鍵次數(shù)的變量*/
extern bit ack;
void delay_us(int i)
{
    int j,k;
    for(j=0;j<i;j++)
    for(k=0;k<1;k++);
}
void delay(int i)
{
   int j,k;
   for(j=0;j<i;j++)
    for(k=0;k<110;k++);
}
void transfer_command(int data1) /*寫(xiě)指令*/  
{
        char i;
        cs1=0;
        rs=0;
        for(i=0;i<8;i++)
        {
                sclk=0;
        delay_us(2);
                if(data1&0x80) sid=1;
                else sid=0;
                sclk=1;
        delay_us(2);
                data1=data1<<=1;
        }
        cs1=1;
}
void transfer_data_lcd(int data1)/*寫(xiě)數(shù)據(jù)*/
{
        char i;
        cs1=0;
        rs=1;
        for(i=0;i<8;i++)
        {
                sclk=0;
        delay_us(1);
                if(data1&0x80) sid=1;
                else sid=0;
                sclk=1;
        delay_us(1);
                data1=data1<<=1;
        }
        cs1=1;
}
void initial_lcd()/*液晶屏初始化*/
{
        //cs1=0;
        reset=0;                //低電平復(fù)位
        delay(100);
        reset=1;                    //復(fù)位完畢
        delay(100);        
        transfer_command(0xe2);         //軟復(fù)位
        delay(5);
        transfer_command(0x2c);  //升壓步聚1
        delay(5);       
        transfer_command(0x2e);  //升壓步聚2
        delay(5);
        transfer_command(0x2f);  //升壓步聚3
        delay(5);
        transfer_command(0x24);  //粗調(diào)對(duì)比度,可設(shè)置范圍0x20~0x27
        transfer_command(0x81);  //微調(diào)對(duì)比度
        transfer_command(0x1f);  //0x1a,微調(diào)對(duì)比度的值,可設(shè)置范圍0x00~0x3f 與上一條是雙指令上一條的0x81不動(dòng),下面的才是值
        transfer_command(0xa2);  //1/7偏壓比(bias)一般不改0xa2是1/9
        transfer_command(0xc8);  //行掃描順序:從上到下
        transfer_command(0xa0);  //列掃描順序:從左到右
        transfer_command(0x40);  //起始行:第一行開(kāi)始
        //transfer_command(0xA7);         //反顯
        transfer_command(0xaf);  //開(kāi)顯示       

}
void lcd_address(uchar page,uchar column) /*顯示位置,行和列的設(shè)置*/
{
column=column-1;         //我們平常所說(shuō)的第 1 列,在 LCD 驅(qū)動(dòng) IC 里是第 0 列。所以在這里減去 1.
page=page-1;
transfer_command(0xb0+page);   //設(shè)置頁(yè)地址。每頁(yè)是 8 行。一個(gè)畫(huà)面的 64 行被分成 8 個(gè)頁(yè)。我們平常所說(shuō)的第 1 頁(yè),在 LCD 驅(qū)動(dòng) IC 里是第 0 頁(yè),所以在這里減去1*/
transfer_command(((column>>4)&0x0f)+0x10); //設(shè)置列地址的高4 位
transfer_command(column&0x0f);    //設(shè)置列地址的低4 位
}
/*全屏清屏*/
void clear_screen()
{
unsigned char i,j;
  for(i=0;i<9;i++)
{
  lcd_address(1+i,1);
  for(j=0;j<132;j++)
{
transfer_data_lcd(0x00);

  }
}
}

//送指令到晶聯(lián)訊字庫(kù)IC
void send_command_to_ROM( uchar datu )
{
uchar i;
for(i=0;i<8;i++ )
{
  Rom_SCK=0;
  delay_us(10);
  if(datu&0x80)Rom_IN = 1;
  else Rom_IN = 0;
  datu = datu<<1;
  Rom_SCK=1;
  delay_us(10);
}
}

//從晶聯(lián)訊字庫(kù)IC 中取漢字或字符數(shù)據(jù)(1 個(gè)字節(jié))
static uchar get_data_from_ROM( )
{
uchar i;
uchar ret_data=0;
for(i=0;i<8;i++)
{
  Rom_OUT=1;
  Rom_SCK=0;
  //delay_us(1);
  ret_data=ret_data<<1;
  if( Rom_OUT )
   ret_data=ret_data+1;
  else
   ret_data=ret_data+0;
  Rom_SCK=1;
  //delay_us(1);
}
return(ret_data);
}


//從指定地址讀出數(shù)據(jù)寫(xiě)到液晶屏指定(page,column)座標(biāo)中
void get_and_write_16x16(ulong fontaddr,uchar page,uchar column)
{
uchar i,j,disp_data;
Rom_CS = 0;
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16);  //地址的高8 位,共24 位
send_command_to_ROM((fontaddr&0xff00)>>8);   //地址的中8 位,共24 位
send_command_to_ROM(fontaddr&0xff);     //地址的低8 位,共24 位
for(j=0;j<2;j++)
{
  lcd_address(page+j,column);
  for(i=0; i<16; i++ )
     {
   disp_data=get_data_from_ROM();
   transfer_data_lcd(disp_data); //寫(xiě)數(shù)據(jù)到LCD,每寫(xiě)完1 字節(jié)的數(shù)據(jù)后列地址自動(dòng)加1
  }
}
Rom_CS=1;
}

void get_and_write_8x16(ulong fontaddr,uchar page,uchar column)
{
uchar i,j,disp_data;
Rom_CS = 0;
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)>>16);  //地址的高8 位,共24 位
send_command_to_ROM((fontaddr&0xff00)>>8);   //地址的中8 位,共24 位
send_command_to_ROM(fontaddr&0xff);     //地址的低8 位,共24 位
for(j=0;j<2;j++)
{
  lcd_address(page+j,column);
  for(i=0; i<8; i++ )
     {
   disp_data=get_data_from_ROM();
   transfer_data_lcd(disp_data); //寫(xiě)數(shù)據(jù)到LCD,每寫(xiě)完1 字節(jié)的數(shù)據(jù)后列地址自動(dòng)加1
  }
}
Rom_CS=1;
}

//****************************************************************


ulong  fontaddr=0;
void display_GB2312_string(uchar page,uchar column,uchar *text)
{  
uchar i= 0;     
while((text[i]>0x00))
{
  if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1))
  {      
   //國(guó)標(biāo)簡(jiǎn)體(GB2312)漢字在晶聯(lián)訊字庫(kù)IC 中的地址由以下公式來(lái)計(jì)算:
   //Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0
   //由于擔(dān)心8 位單片機(jī)有乘法溢出問(wèn)題,所以分三部取地址
   fontaddr = (text[i]- 0xb0)*94;  
   fontaddr += (text[i+1]-0xa1)+846;
   fontaddr = (ulong)(fontaddr*32);
   get_and_write_16x16(fontaddr,page,column);  //從指定地址讀出數(shù)據(jù)寫(xiě)到液晶屏指定(page,column)座標(biāo)中
   i+=2;
   column+=16;
  }
  else if(((text[i]>=0xa1) &&(text[i]<=0xa3))&&(text[i+1]>=0xa1))
  {      
   //國(guó)標(biāo)簡(jiǎn)體(GB2312)15x16 點(diǎn)的字符在晶聯(lián)訊字庫(kù)IC 中的地址由以下公式來(lái)計(jì)算:
   //Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0
   //由于擔(dān)心8 位單片機(jī)有乘法溢出問(wèn)題,所以分三部取地址
   fontaddr = (text[i]- 0xa1)*94;  
   fontaddr += (text[i+1]-0xa1);
   fontaddr = (ulong)(fontaddr*32);

   get_and_write_16x16(fontaddr,page,column);  //從指定地址讀出數(shù)據(jù)寫(xiě)到液晶屏指定(page,column)座標(biāo)中
   i+=2;
   column+=16;
  }
  else if((text[i]>=0x20) &&(text[i]<=0x7e))  
  {         
   fontaddr = (text[i]- 0x20);
   fontaddr = (unsigned long)(fontaddr*16);
   fontaddr = (unsigned long)(fontaddr+0x3cf80);   

   get_and_write_8x16(fontaddr,page,column);  //從指定地址讀出數(shù)據(jù)寫(xiě)到液晶屏指定(page,column)座標(biāo)中
   i+=1;
   column+=8;
  }
  else
   i++;  
}

}


void timer0_chushihua()/*定時(shí)器初始化*/
{
    TMOD=0x01;
        TH0=0x00;
        TL0=0x00;
        EA=1;
        ET0=1;
        TR0=1;
}

uchar read(uchar ch )
{
uchar temp=0;

iic_start();
iic_writebyte(0x90);//確認(rèn)芯片
if(ack==0)return(0);
//iic_respons();
iic_writebyte(0x00|ch);//確認(rèn)通道
iic_respons();
//讀出數(shù)據(jù),放進(jìn)temp
iic_start();
iic_writebyte(0x91);
if(ack==0)return(0);
//iic_respons();   /*如果采用iic_respons(),而不要if(ack==0)return(0),則顯示是從0001開(kāi)始,而不是0000,為什么?*/
temp=readbyte();
NoAck_I2c();
iic_stop();
return temp;
}

void dis(void)/*將采集的電壓信號(hào)變?yōu)樽址员鉒CD顯示*/
{

    int H, M, S, W;
    p=read(0);

        H=((p/1000)%10);
        M=(p/100)%10;
        S=(p/10)%10;
        W=(p%10);
        sprintf(xianshi, "%d%d%d%d", H, M, S,W);             // 將整數(shù)轉(zhuǎn)換成字符串
                       
}

void timer0() interrupt 1
{          
          
       TH0=(65536-45536)/256;/*設(shè)定定時(shí)器初始值,定時(shí)20ms*/
       TL0=(65536-45536)%256;
           dis();
          
           court++;
               
}

void main(void)
{          
      iic_init();
      initial_lcd();/*液晶屏初始化*/
      clear_screen();/*液晶屏清屏*/
      timer0_chushihua();                                                   
     while(1)
    {          
            if(court==1)
           {
                       
            display_GB2312_string(7,33,xianshi);/*顯示按鍵按過(guò)的次數(shù)*/
               
            display_GB2312_string(5,1,"∑  000000");/*顯示固定字符和數(shù)字*/
        //display_GB2312_string(1,1,"dshyhuf");/*顯示固定字母*/
            court=0;
           }

     }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94431 發(fā)表于 2015-12-30 09:17 | 只看該作者
已解決..........................
回復(fù)

使用道具 舉報(bào)

板凳
ID:1 發(fā)表于 2016-1-2 00:41 | 只看該作者
哭瞎了 發(fā)表于 2015-12-30 09:17
已解決..........................

樓主能分享一下怎么解決的嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:193632 發(fā)表于 2017-4-25 22:22 | 只看該作者
對(duì)呀,為什么也不分享一下。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久久久久中文字幕 | 久久激情视频 | 91一区二区| 免费特级黄毛片 | 国产成人叼嘿视频在线观看 | 国产蜜臀97一区二区三区 | 欧美日韩亚洲系列 | 日韩在线 | 国产日韩在线观看一区 | 国产亚洲精品久久久久动 | 国产伦精品一区二区三区照片91 | 成人在线小视频 | 99久久免费精品国产男女高不卡 | 美女视频黄色的 | 精品在线一区 | 69福利影院 | 色综合久久久久 | 精品国产免费人成在线观看 | 国产成人免费视频网站视频社区 | 一级特黄视频 | 成人av免费 | 超碰在线97国产 | 婷婷五月色综合 | 欧美一区免费 | 日本中出视频 | 91一区二区 | www.99热| 亚洲夜射 | 男人的天堂中文字幕 | 国产精品久久久久久久岛一牛影视 | 一级毛片大全免费播放 | 国产成人精品免高潮在线观看 | 日日操夜夜操天天操 | 一道本视频 | 99热首页 | 欧美日韩一区精品 | 亚洲精品在 | 国产成人福利在线 | 亚洲视频二区 | 综合第一页 | 免费在线观看一区二区 |