星空最火知名网站

登录 免费注册 星空最火知名网站 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请教:Atmega128总线方式驱动SED1330 320×240液晶 初始化问题?

作者:geniusboy 栏目:单片机
请教:ATMEGA128总线方式驱动SED1330 320×240液晶 初始化问题?
大家好,
      我是一个新手,最近在做一个液晶显示的项目,用的ATMEGA128,总线方式,液晶模块是SED1330控制带32K RAM。我写的程序在下面,希望大家能看看,帮我解答一下,搞了几天了就是显示不出来。
  主要想问一问:
(1)128的初初始化问题?(因为不太会看时序图,看1330时序要求WR宽度最小220ns,所以为了保险起见,我让128在RD WR后面插入了两个等待周期,不知道这样对不对,我把时序图也传上来)
(2)我用的是128内部8M晶振,熔丝位设置位SUT:10  CKSEL:0100 CKOPT:1  不知道是否正确?
(3)关于地址总线的使用?不知道我定义是否正确?
(4)SED1330初始化的问题?不知道我初始化参数是否正确?
(5)程序中的错误
  先谢谢大家了!

// Target : M128
// CRYSTAL: 8.0000Mhz

#include <iom128v.h>
#include <macros.h>
#include <stdio.h>

// 直接访问方式地址定义  PA0~7接DB0~7
// PC0~CS  PC1~A0
//CS=0 A0=0 写数据口
#define LcmWdataPort (*(volatile unsigned CHAR *)0xFC00)  

//CS=0 A0=1 写命令口     
#define LcmCmdPort  (*(volatile unsigned CHAR *)0xFE00)  

//CS=0 A0=1 读数据口   
#define LcmRdataPort LcmCmdPort      

//CS=0 A0=0 读忙状态标志口
#define LcmStatusPort LcmWdataPort     

void port_init(void)    // I/O端口初始化函数{
{  
DDRG = 0xFF;;  //PG3设定为输出(液晶RESET复位端)
PORTG = 0xFF;  //PG3输出高电平1(液晶低电平复位)  
PORTA = 0xff;
}

void init_devices(void)     //调用初始化函数以及外部存储器初始化
{
//stop errant interrupts until set up
CLI(); //disable all interrupts  
XMCRA = 0x0A;   // 外部存储器地址不分区,在RD、WR后插入2个等待周期
XMCRB = 0x00;   //不使能总线保持功能,不释放地址线
port_init();     //I/O口初始化
MCUCR = 0x80;   //使能外部存储器,并与XMCRA配合设定了插入2个等待周期
SEI(); //re-enable interrupts
//all peripherals are now initialised
}

// 变量类型标识的宏定义
#define UCHAR unsigned CHAR
#define Uint unsigned int
// 时序要求:/WR=0;/RD=1  
#define SystemSet   0x40        
// P1-P8参数                        
UCHAR ParaSysTable[8]= {0x30,0x87,0x07,0x27,0x42,0xF0,0x30,0x00};   
                       
/* P1=0x30 : 顶天无边界,单屏结构驱动,内部CGROM+CGRAM1(8×8点阵)
   P2=0x87 : B形驱动波形,字符体宽度8列
   P3=0x07 : C形驱动波形,字符体高度8行
   P4=0x27 : C/R 有效显示窗口参数 320/8 = 40 = 0x27
   P5=0x42 : 驱动频率时间常数 TC/R >= C/R+4 Fosc >= 9*TC/R*L/F*FR  FR=70Hz
   P6=0xF0 : L/F 扫描的行数 240行 = 0xF0
   P7,P8   : 设定分配给每一行的显示存储空间0x30=48字节   */   


/*******************显示域设置。后续10字节参数串ParaScrTableA[]****************/
// 时序要求:/WR=0;/RD=1
#define Scroll      0x44            

#define BasePart1   0x00
#define BasePart2   0x40
#define BasePart3   0x80
#define BasePart4   0x00

UCHAR ParaScrTableA[10]={0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4 };

/*****************************休闲模式设置。后续参数:无*********************************/
#define SleepIn 0x53

/*****************************显示状态设置。后续参数1字节.*****************************/
#define DispOn  0x59
#define DispOff 0x58
//设定光标闪烁,4个显示区均显示但不闪烁。
#define DispOnP1 0x56   


/***************************显示合成方式设置。后续参数1字节。**************************/
#define Ovlay  0x5b
//设定1、3显示区为文本显示,2显示区为图形。L1、L2、L3简单或合成
#define OvlayP1 0x00   


/*****************************点位移设置。后续参数1字********************************/
#define HdotScr 0x5A
//设定点位移为1
#define HdotScrP1 0x00   


/***********************光标形状设置。后续参数2字节*********************************/
#define CsrForm  0x5D
//设定光标占8列
#define CsrFormP1 0x07   
//设定光标为块状,占8行
#define CsrFormP2  0x87    


/*********************Cgram首地址设置。后续参数2字节*********************************/
#define CgramAdr   0x5C
//定义外部CGROM开始地址为8000H
#define CgramAdrP1 0x00    
#define CgramAdrP2 0x80


/************************光标移动方向设置。后续参数:无****************************/
//光标右移
#define CsrDirR  0x4c    
//光标左移
#define CsrDirL  0x4d     
//光标上移
#define CsrDirU  0x4e   
//光标下移
#define CsrDirD  0x4f    


/************************光标指针设置。后续参数2字节*****************************/
#define CsrW  0x46


/************************读取光标指针。后续参数2字节****************************/
#define CsrR  0x47

/**************************数据写入设置。后续参数N字节************************/
#define mWrite  0x42

/**************************数据读取设置。后续参数N字节***********************/
#define mRead  0x43

/*******************************程序参数定义***************************/
// 忙状态标志位0b0100 0000
#define Busy  0x40    
// 相对于320 X 240 液晶屏  
#define AP  0x30        

/*____________________________微妙延时程序_,8M晶振______________________________*/  
void delay_1us()
         {  
          asm("nop");
          asm("nop");
          asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   }
         
void delay_us(UCHAR n)
    {
    while(n--)
    { delay_1us();}
    }

/*___________________________毫秒延时程序_______________________________*/
void delay_ms(UCHAR m)
     {
      while(m--)
      {delay_us(1000);}
     }

/*___________________________判断忙标志BF子程序________________________*/
void WaitForBusy(void)
    {
     while(LcmStatusPort & Busy);
    }

/*_________
2楼: >>参与讨论
chuandaoxy
把硬件图贴出来
 
3楼: >>参与讨论
geniusboy
附上硬件原理图
chuandaoxy我把硬件原理图发上来了,多谢啊!

4楼: >>参与讨论
forest_j
sed系列有个毛病,容易偏屏
上电后,显示内容有时候会偏到一边几个像素.跟电源的上掉电顺序有关系.

5楼: >>参与讨论
geniusboy
forest_j您好
感谢forest_j您的回复。我不知道有这个问题,但是我也想过怕LCD先上电,AVR后,会出现问题,所以我在我的LCD初始化程序里,加了几个语句,用128先让LCDreset端置低电平500us让它复位,在开始写指令,初始化。
您能在看看可能是有别的问题吗?我等下改一下指针地址,在烧一次看看,非常感谢!

6楼: >>参与讨论
forest_j
是这样的
先复位一下再初始化,要有一定的延迟时间.如果你的板将来出现偏屏问题,可以试下用单片机控制负电源的接通.
先确认一下是否正确初始化,如果硬件连接错误或指令不对没有初始化,屏幕应该是上下滚动的横条.

7楼: >>参与讨论
geniusboy
回复forest_j
谢谢,我发现了一个错误,就是    
   WriteCommand(DispOn);    //写入LCM开显示屏幕指令
    WriteCommand(DispOnP1);   //写入P1参数,光标闪烁,1,2,3,4区显示
第二个语句应该是WriteData(DispOnP1);
我改了这个语句,还是没有显示。
此外我在复位后加了50ms延迟,不知道这个时间够不够。另外控制负电源接通,我会试试的,感谢您!

8楼: >>参与讨论
geniusboy
补充
我现在照上面的程序烧进去后,上电后,屏幕只有背光亮着,其他什么都没有显示,也没有滚动条纹,没有亮条纹!希望还有哪位能帮忙分析一下,哦,forest_j我想再问一下,如何确定是否正确初始化呢了?

9楼: >>参与讨论
geniusboy
自己再顶一下:)
高手们再帮帮忙啊,又一天又要过了,还是没有进展,郁闷疯了!

参与讨论
昵称:
讨论内容:
 
 
相关帖子
c51请教
AT89S51是AVR单片机不?(菜鸟的问题,不跪求)
请问各位!!AVR哪种单片机合符以下要求!
仿真时不小心把OCDEN和JTAGEN的使能给去掉了,怎么办?
炜煌WH-500UA


Copyright © 1998-2006 www.j71x6.cn 浙ICP证030469号
博鱼最火网上大全(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 网络188BET导航(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 外围权威利记官方(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 真人利记足球大全(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 永利网络足球网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 雷火竞技正规权威网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 188BET线上外围(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 永利最新网上足球(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新)