音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

求助: 請好心人幫忙看下HS12232-9漢字LCD的3線程序問題

作者:hotpower 欄目:單片機(jī)
求助: 請好心人幫忙看下HS12232-9漢字LCD的3線程序問題
先給個(gè)我注解后商家提供的51匯編程序

;This program is for 12232F,12864-12,12864M Serial TEST.html">TEST
;    RS--------P3.0
;    R/W-------P3.1
;    E---------P3.2
;    DB0~7-----P1

CS    EQU    P3.0;片選(串行) 0:禁止 1:允許
SID    EQU    P3.1;輸入串行數(shù)據(jù)(串行)
CLK    EQU    P3.2;輸入串行脈沖(串行)
PSB    EQU    P3.3;控制界面 0:串行 1:并行8/4 位

    ORG    0000H
    AJMP    START
;    ORG    0003H
;    LCALL     PAUSE
    ORG    0100h
START:
;    MOV  IE,#81H            ;EXT. INT0 PERMIT
;    MOV  IP,#01H            ;INT0 IS FIRST INT. LEVEL
;    MOV  TCON,#00H           ;TIMER/COUNTER CONTROLER INIT.
    MOV   SP, #67H
    CLR   PSB;選擇串行工作模式
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL SETUP;LCD初始化設(shè)置
    LCALL DEF_CHAR;自定義字符顯示

/*---------------------------------------------------
    顯示4行CGRAM1字符
----------------------------------------------------*/
    MOV  A,#80H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x00命令
/*---------------------------------------------------
    顯示第一行CGRAM1字符
----------------------------------------------------*/
    MOV  R3,#8
TEST11:    
    MOV  DPTR,#CGRAM1    ;CGRAM TEST
    LCALL WRITE_CGRAM
    DJNZ R3,TEST11
    MOV  A,#90H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x10命令
/*---------------------------------------------------
    顯示第二行CGRAM1字符
----------------------------------------------------*/
    MOV  R3,#8
TEST12:    
    MOV  DPTR,#CGRAM1
    LCALL WRITE_CGRAM
    DJNZ  R3,TEST12
    MOV  A,#88H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x08命令
/*---------------------------------------------------
    顯示第三行CGRAM1字符
----------------------------------------------------*/
    MOV  R3,#8
TEST13:
     MOV  DPTR,#CGRAM1
    LCALL WRITE_CGRAM
    DJNZ  R3,TEST13
    MOV  A,#98H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x18命令
/*---------------------------------------------------
    顯示第四行CGRAM1字符
----------------------------------------------------*/
    MOV  R3,#8
TEST14:    
    MOV  DPTR,#CGRAM1
    LCALL WRITE_CGRAM
    DJNZ  R3,TEST14
/*---------------------------------------------------
    CGRAM1字符顯示等待延時(shí)5秒
----------------------------------------------------*/
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS

/*---------------------------------------------------
    顯示4行CGRAM2字符
----------------------------------------------------*/
    MOV  A,#80H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x00命令
/*---------------------------------------------------
    顯示第一行CGRAM2字符
----------------------------------------------------*/
    MOV  R3,#8
TEST21:
    MOV  DPTR,#CGRAM2
    LCALL WRITE_CGRAM
    DJNZ R3,TEST21
    MOV  A,#90H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x10命令
/*---------------------------------------------------
    顯示第二行CGRAM2字符
----------------------------------------------------*/
    MOV  R3,#8
TEST22:
    MOV  DPTR,#CGRAM2
    LCALL WRITE_CGRAM
    DJNZ  R3,TEST22
    MOV  A,#88H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x08命令
/*---------------------------------------------------
    顯示第三行CGRAM2字符
----------------------------------------------------*/
    MOV  R3,#8
TEST23:
      MOV  DPTR,#CGRAM2
    LCALL WRITE_CGRAM
    DJNZ R3,TEST23
    MOV  A,#98H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x18命令
/*---------------------------------------------------
    顯示第四行CGRAM2字符
----------------------------------------------------*/
    MOV  R3,#8
TEST24:    
    MOV  DPTR,#CGRAM2
    LCALL WRITE_CGRAM
    DJNZ R3,TEST24
/*---------------------------------------------------
    CGRAM2字符顯示等待延時(shí)
----------------------------------------------------*/
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS
    LCALL DELAY;延時(shí)150mS

/*---------------------------------------------------
    顯示4行CGRAM3字符
----------------------------------------------------*/
    MOV  A,#80H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x00命令
/*---------------------------------------------------
    顯示第一行CGRAM3字符
----------------------------------------------------*/
    MOV  R3,#8
TEST31:    
    MOV  DPTR,#CGRAM3
    LCALL WRITE_CGRAM
    DJNZ R3,TEST31
    MOV  A,#90H
    LCALL WRITE_COM;發(fā)送設(shè)定DDRAM地址0x10命令
/*---------------------------------------------------
    顯示第二行CGRAM3字符
----------------------------------------------------*/
    MOV  R3,#8
TEST32:    <
2樓: >>參與討論
hotpower
再請幫忙看下我用WINAVR編寫的C程序毛病出在哪里???
調(diào)了2個(gè)多小時(shí)都沒通...郁悶呀...

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/wdt.h>
#include <avr/ina90.h>
#include <avr/eeprom.h>
//#include <stdio.h>
#include <avr/delay.h>


#define  FREQ 8  //Meaga8L,8MHZ
#define  CS   PB2//LCD片選(串行) 0:禁止 1:允許
#define  SID  PB3//LCD輸入串行數(shù)據(jù)(串行)
#define  CLK  PB5//LCD輸入串行脈沖(串行)

#define  SS   PB2//LCD片選(串行) 0:禁止 1:允許
#define  MOSI PB3//LCD輸入串行數(shù)據(jù)(串行)
#define  SCK  PB5//LCD輸入串行脈沖(串行)

void PortIoInit(void)
{
  DDRB  = 0;//設(shè)置B口全為輸入
  DDRC  = 0;//設(shè)置C口全為輸入
  DDRD  = 0;//設(shè)置D口全為輸入
  PORTB = 0xff;//設(shè)置B口全部上拉
  PORTC = 0xff;//設(shè)置C口全部上拉
  PORTD = 0xff;//設(shè)置D口全部上拉
}

void SPI_MasterInit(void)
{
/* 設(shè)置MOSI 和SCK 為輸出,其他為輸入 */
  DDRB = (1 << MOSI) | (1 << SCK);
  PORTB = 0xff;
/* 使能SPI 主機(jī)模式,設(shè)置時(shí)鐘速率為fck/16 ,SPI方式0*/
//  SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
/* 使能SPI 主機(jī)模式,設(shè)置時(shí)鐘速率為fck/16 ,SPI方式1*/
//  SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPHA) | (1 << SPR0);
/* 使能SPI 主機(jī)模式,設(shè)置時(shí)鐘速率為fck/16 ,SPI方式2*/
  SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL) | (1 << SPR0);
/* 使能SPI 主機(jī)模式,設(shè)置時(shí)鐘速率為fck/16 ,SPI方式3*/
//  SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL) | (1 << CPHA) | (1 << SPR0);
}

void SPI_MasterTransmit(unsigned CHAR cData)
{
/* 啟動數(shù)據(jù)傳輸 */
  SPDR = cData;
/* 等待傳輸結(jié)束 */
  while(!(SPSR & (1 << SPIF)));
/*
  for (unsigned CHAR i = 8; i > 0; i --)
  {
    if (cData & 0x80) PORTB |= (1 << MOSI);
    else PORTB &= ~(1 << MOSI);
    PORTB &= ~(1 << SCK);
    cData <<= 1;
    PORTB |= (1 << SCK);
  }
*/  
}

void DelayMs(unsigned int t)
{
unsigned int i;
  for(i = 0; i < t; i++)
    _delay_loop_2(250 * FREQ);
}

/*--------------------------------------------------------
    發(fā)送8位LCD控制命令
--------------------------------------------------------*/
void LcdSendCommand(unsigned CHAR cCommand)
{
  DelayMs(10);//等待延時(shí)10Ms
//  _delay_loop_2(72 * FREQ);//ST7920要求等待72uS
/*--------------------------------------------------------
    發(fā)送同步脈沖11111 WR(0) RS(0) 0發(fā)送順序從左至右)
--------------------------------------------------------*/
//  PORTB &= ~(1 << SS);//SS=0,啟動SPI
  PORTB |= (1 << SS);//SS=1,關(guān)閉SPI
  SPI_MasterTransmit(0xf8);//發(fā)送LCD控制命令
  SPI_MasterTransmit(cCommand & 0xf0);//發(fā)送高4位LCD控制命令
  SPI_MasterTransmit(cCommand << 4);//發(fā)送低4位LCD控制命令
//  PORTB |= (1 << SS);//SS=1,關(guān)閉SPI
  PORTB &= ~(1 << SS);//SS=0,啟動SPI
}

/*--------------------------------------------------------
    發(fā)送8位LCD顯示數(shù)據(jù)
--------------------------------------------------------*/
void LcdSendData(unsigned CHAR cData)
{
  DelayMs(10);//等待延時(shí)10Ms
//  _delay_loop_2(72 * FREQ);//ST7920要求等待延時(shí)72uS
/*--------------------------------------------------------
    發(fā)送同步脈沖11111 WR(0) RS(0) 0發(fā)送順序從左至右)
--------------------------------------------------------*/
//  PORTB &= ~(1 << SS);//SS=0,啟動SPI
  PORTB |= (1 << SS);//SS=1,關(guān)閉SPI
  SPI_MasterTransmit(0xfa);//發(fā)送LCD顯示數(shù)據(jù)
  SPI_MasterTransmit(cData & 0xf0);//發(fā)送高4位LCD顯示數(shù)據(jù)
  SPI_MasterTransmit(cData << 4);//發(fā)送低4位LCD顯示數(shù)據(jù)
//  PORTB |= (1 << SS);//SS=1,關(guān)閉SPI
  PORTB &= ~(1 << SS);//SS=0,啟動SPI
}


/*---------------------------------------------------
    LCD初始化設(shè)置
----------------------------------------------------*/
void LcdInit(void)
{
/*---------------------------------------------------
    LCD模塊上電等待延時(shí)
----------------------------------------------------*/
  DelayMs(1000);//上電等待延時(shí)1000Ms
  SPI_MasterInit();//SPI初始化
//  LcdSendCommand(0b00100000);//發(fā)送4位控制命令
  LcdSendCommand(0b00110000);//發(fā)送8位控制命令
  LcdSendCommand(0b00000010);//發(fā)送位址歸位命令,設(shè)定DDRAM位址計(jì)數(shù)器為0
  LcdSendCommand(0b00000100);//發(fā)送進(jìn)入點(diǎn)命令
  LcdSendCommand(0b00001100);//發(fā)送開顯示關(guān)光標(biāo)命令
  LcdSendCommand(0b00000001);//發(fā)送清除顯示命令
  LcdSendCommand(0b10000000);//發(fā)送設(shè)定DDRAM地址0x00命令
}

unsigned CHAR SetLcdDisplayCharPos(unsigned CHAR row, unsigned CHAR col)
{
  if ((row < 2) && (col < 16))//英文字符為2行16列
  {
    LcdSendCommand(0x80 + row * 16 + col);//發(fā)送設(shè)定DDRAM地址row * 16 + col命令
    return 1;
  }
  else
    return 0;
}


void LcdDisplayChar(unsigned CHAR row, unsigned CHAR col, unsigned CHAR * string)
{
  if (SetLcdDisplayCharPos(row, col))
  {
    LcdSendData(*string);
  }
}

unsigned CHAR SetLcdDisplayChinsePos(unsigned CHAR row, unsigned CHAR col)
{
  if ((row < 2) && (col < 8))//漢字字符為2行8列(偶數(shù)對齊)
  {
    LcdSendCommand(0x80 + row * 16 + col * 2);//發(fā)送設(shè)定DDRAM地址row * 16 + col * 2命令
    return 1;
  }
  else
    return 0;
}

void LcdDisplayChinse(unsigned CHAR row, unsigned CHAR col, unsigned CHAR * string)
{
  if (SetLcdDisplayChinsePos(row, col))
  {
    LcdSendData(*string);
    LcdSendData(*(string + 1));
  }
}

void LcdDisplayString(unsigned CHAR * string)
{
  while(*string) LcdSendData(*string ++);
}


//main程序
void main(void)
{
  PortIoInit();
  LcdInit();
// sei();
  for(;;)
  {
    DelayMs(1000);//上電等待延時(shí)1000Ms
    SetLcdDisplayChinsePos(0, 0);//漢字定位到上行左端
    LcdDisplayString("漢字顯示演示程序");
    SetLcdDisplayCharPos(1,0);//字符定位到下行左端
    LcdDisplayString("0123456789ABCDEF");
    DelayMs(1000);//上電等待延時(shí)1000Ms
    DelayMs(1000);//上電等待延時(shí)1000Ms
    DelayMs(1000);//上電等待延時(shí)1000Ms
    DelayMs(1000);//上電等待延時(shí)1000Ms
  }    
}



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
為什么我的4052總是有問題
讀程序
請教WAVE c51編程,設(shè)置端點(diǎn)后,怎么設(shè)置變量觀察項(xiàng)?
急需幫助~!~!~!!~!~!~!
有誰用過TO-263封裝的雙向可控硅?4A/600V大家?guī)兔ν扑]一下
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號