导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]sed1335告急[seeyounow]

 *第21521篇: [求助]sed1335告急

  
楼 主:seeyounow 2004年4月29日21:12
 [求助]sed1335告急
我现在做sed1335驱动640*240屏幕,用c8051f124驱动,P1口为数据口,写了个初始化程
序,但是屏幕总是是不停的闪烁,调试时,我也监控了数据端口P1,P3口间接控制,发现传送数据正确,我想可能是时序上的问题,但又不知道具体问题出在哪里;硬件设计绝对没问题,因为先前别人用汇编语言编过一段简单的程序,可以显示出来。我把初始化程序单独拿出来,麻烦哪位高手指点一二,不胜感激!
#include   <c8051f120.h>  
#include   <intrins.h>  
#define uchar unsigned char
#define uint  unsigned int

//sed1335指令代码
#define SYSTEM_SET        0x40
#define SLEEP_IN        0x53
#define    DISPON            0x59
#define DISPOFF            0x58
#define SCROLL            0x44
#define    CSRFORM            0x5D
#define    CGRAMADR        0x5C
#define CSRDIR_UP        0x4E
#define CSRDIR_DOWN        0x4F
#define CSRDIR_LEFT        0x4D
#define CSRDIR_RIGHT        0x4C
#define HDOTSCR            0x5A
#define OVLAY            0x5B
#define CSRW            0x46
#define CSRR            0x47
#define MWRITE            0x42
#define MREAD            0x43

#define SAD1      0x0000                      /*定义显示一区首址*/
#define SAD1L     0x00                        /*定义显示一区首址低8位*/
#define SAD1H     0x00                         /*定义显示一区首址高8位*/
#define SL1       239                       /*定义显示一区所占显示屏幕的行数*/

#define SAD2      0x4000                          /*定义显示二区首址*/
#define SAD2L     0x00                           /*定义显示二区首址低8位*/
#define SAD2H     0x40                             /*定义显示二区首址高8位*/
#define SL2       239                       /*定义显示二区所占显示屏幕的行数*/

#define SAD3      0x8000                               /*定义显示三区首址*/
#define SAD3L     0x00                         /*定义显示三区首址低8位*/
#define SAD3H     0x00                           /*定义显示三区首址高8位*/

#define SAD4      0x0000                               /*定义显示四区首址*/
#define SAD4L     0x00                            /*定义显示四区首址低8位*/
#define SAD4H     0x00                            /*定义显示四区首址高8位*/

//间接控制信号定义
sbit    RS = P3^0;
sbit    RD = P3^1;
sbit    WR = P3^2;

//SYSTME SET参数
uchar code SYSTEM_SET_CODE[8] = {0x30,0x87,0x07,0x27,0x42,0xF0,0x30,0x00};
//SCROLL参数
uchar code SCROLL_SET_CODE[10] = 
{SAD1L,SAD1H,SL1,SAD2L,SAD2H,SL2,SAD3L,SAD3H,SAD4L,SAD4H};

void main(void);
void LCDInit(void);
void LCDClear(void);
void WCODE(uchar COM);
void WDATA(uchar DAT1);
uchar RDATA(); 
void Delay(uint tt);

void main()
{    
    WDTCN = 0xDE;    //关看门狗定时器
    WDTCN = 0xAD;
    
    SFRPAGE = CONFIG_PAGE;
    XBR2 = 0x40;

    OSCICN = 0xC0;  //设置系统时钟为3Mhz
    CLKSEL = 0x00;
    
    Delay(1000);
    LCDInit();
    LCDClear();
}

void Delay(uint tt)      /* 延时函数 */
{
  uchar i; 
  do
  {
    for (i=0;i  <125;i++);      
  }
  while((tt--)!=0);
}

//初始化子程序
void LCDInit(void)
{    
    int j ;
    WCODE(SYSTEM_SET);            //写SYSTEM SET指令和参数
    for (j=0; j  <8; j++)
    {
        WDATA(SYSTEM_SET_CODE[j]);
    }
    WCODE(SCROLL);              //写SCOLL指令和参数
    for (j=0; j  <10; j++)
    {
        WDATA(SCROLL_SET_CODE[j]);
    }
    WCODE(HDOTSCR);                 //写HDOTSCR指令和参数
    WDATA(0x00);
    WCODE(OVLAY);                //写OVLAY指令和参数
    WDATA(0x00);
    WCODE(DISPON);                //写DISPON指令和参数
    WDATA(0x54);
}    

//清屏子程序
void LCDClear(void)
{
    int i, k;                //设置循环量
    WCODE(CSRDIR_RIGHT);            //写入CSRDIR指令
    WCODE(CSRW);                //写入CSRW指令
    WDATA(0x00);                //写入参数CSRL
    WDATA(0x00);                //写入参数CSRH
    WCODE(MWRITE);                //写入MWRITE指令
    for (i=0; i  <127; i++)            //循环
    { 
        for (k=0; k  <127; k++)
            WDATA(0x00);             //写入显示数据为0
    }            
}

//写指令代码子程序
void WCODE(uchar COM)
{
    P1 = COM;
    RS = 1;
    WR = 0;
    WR = 1;
}

//写参数及显示数据子程序
void WDATA(uchar DAT1)
{
    P1 = DAT1;
    RS = 0;
    WR = 0;
    WR = 1;
}

//读参数及显示数据子程序
uchar RDATA()
{
    uchar DAT1;
    RS = 1;
    P1 = 0xFF;
    RD = 0;
    DAT1 = P1;
    RD = 1;
    return (DAT1);
}

  
2楼:seeyounow 2004年4月30日18:23
 [求助]初始化已经解决了,但是写汉字时又出问题了
struct HZ_GB16
{
 char ZK[32];
};
struct HZ_GB16 code HZ_LIB[] = {
       
       {0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,
        0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
 0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,
 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00}, //中 0
  
3楼:seeyounow 2004年4月30日18:27
 初始化已经解决了,但是写汉字时又出问题了
今天仔细检查了一遍程序,发现原来是间接控制信号的P3端口错了,该过来后就可以
了。
不过写汉字时,出现的是一些乱七八糟的符号。我是参考晓奇老师写的C程序。哪位
高手帮
忙看看!!!
void WordInGraph(uint O_XL, uchar O_YL, uchar HZCODE, uchar sad)
 {
     uchar COUNT1, COUNT2;
     uchar temp;
     
     temp = O_YL * 40 + O_XL + sad;
     WCODE(CSRDIR_DOWN);
     
     for (COUNT1=0; COUNT1  <2; COUNT1++)
     {    
         WCODE(CSRW);
         WDATA(temp % 256);
         WDATA(temp / 256);
         WCODE(MWRITE);
     
         for (COUNT2=0; COUNT2  <16; COUNT2++)
         {
          WDATA(HZ_LIB[HZCODE].ZK[COUNT2 * 2 + COUNT1]);
        }
         temp++;
     }
 }
O_XL、O_YL是坐标,HZCODE是汉字的代码,sad是液晶层,比如我现在写一个“中”
字是调
用WordInGraph(0x04,0xA0,0,SAD2)。字模是16*16点阵,格式是用结构的形式写的。
struct HZ_GB16
{
    char ZK[32];
};
struct HZ_GB16 code HZ_LIB[] = {
       
       {0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,
        0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
    0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,
    0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00},    //中 0
}

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:[求助]哪有a'bel4的使用说明?

[下一篇主题]:指令问题  请求帮忙