3894|13

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

液晶320240与ATmega16 [复制链接]

第一次接触液晶屏(320*240, RA8835),用的CPU是ATmega16. 只想显示最简单的字母和数字,却怎么也调不通。。求大侠相助下面是代码:

#include
#include
#include

#define F_CPU 1000000                        //内部晶振1M   
#include

//------------------------------------------------------------------------------
//Parameter Defines
#define dispoff     0x58  //显示关闭    后续参数1字节
#define dispon      0x59  //显示状态打开  后续参数1字节

#define hdotscr     0x5a  //点位移量设置  后续参数1字节
#define ovlay       0x5b  //显示合成设置  后续参数1字节
#define cgramadr    0x5c  //CGRAM首地址设置 后续参数2字节
#define csrform     0x5d  //光标形状设置  后续参数2字节

#define csrdirr     0x4c  //光标向右方向移动 后续参数:无
#define csrdirl     0x4d  //光标向左方向移动 后续参数:无
#define csrdiru     0x4e  //光标向上方向移动 后续参数:无
#define csrdird     0x4f  //光标向下方向移动 后续参数:无

#define csrw        0x46  //设置光标地址  后续参数2字节
#define csrr        0x47  //读出光标地址  后续参数2字节

#define mwrite      0x42  //显示数据写入  后续参数N字节
#define mread       0x43  //显示数据读取  后续参数N字节


/*--------------------------------------------------------------*/
//#define busy        0x40  //忙信号D6   0100 0000
#define AP          0x28  //一行所占显示存储单元的字节数

//------------------------------------------------------------------------------
//===== MCU Interface =====          

#define lcd_bus        PORTB                      //PORTB 数据口
//--------------------------------------
#define WR_H   PORTD |= (1<<2)              //WR 为高
#define WR_L   PORTD &= ~(1<<2)           //WR 为低
#define RD_H   PORTD |= (1<<3)              //RD 为高
#define RD_L   PORTD &= ~(1<<3)              // RD为低
#define CE_H   PORTD |= (1<<4)              //CE  为高    片选
#define CE_L   PORTD &= ~(1<<4)               //CE  为低
#define A0_H   PORTD |= (1<<6)              //A0  为高    命令数据选择
#define A0_L   PORTD &= ~(1<<6)              //A0  为低
#define RST_H  PORTD |= (1<<7)               //RST 为高    复位
#define RST_L  PORTD &= ~(1<<7)               //RST   为低

#define nBUSY (P3&0x08)

void wr_cmd80(unsigned char cmdx);          ///写命令
void wr_dat1335(unsigned char datax); //写数据
void init1335();     //初始化1335函数
void Full1335(void);//全屏显示
void SetCursor1335(unsigned char lsb,unsigned char msb);//设置光标
void clear1335(void);//清屏
void lattice_1335(unsigned int pixelW,unsigned char pixelH,unsigned char dat1,unsigned char dat2);//指定范围内写入数据
void locate_xy1(unsigned char x, unsigned char y);          //定位光标
void show_char(unsigned char x, unsigned char y,  char *string);    //字符串显示



////CPU初始化//////
void CPUInit( void )                                                                                                
{
   DDRB  = 0xff;
   PORTB = 0x00;                                        //B口输出   0, D0~D7
   DDRD |= (1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7);
   PORTD |= (1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7);         //D口输出 ,1,PD2为/WR PD3为/RD PD4为CE PD6为A0 PD7为/RST
}                                

/////  标准8080时序写命令//////////////

unsigned char rd_status(void)
{
   unsigned char datx;
   A0_L;
   WR_H;
   RD_L;
   datx = lcd_bus;
   RD_H;
   return datx;
}

void wr_cmd80(unsigned char cmdx)               //写命令
{
   CE_L;
   A0_H;
   RD_H;            
   //lcd_cmd = cmdx;
   lcd_bus = cmdx;
   WR_L;
   WR_H;     
   CE_H;
}
////////////写数据///////////////////
void wr_dat1335(unsigned char datax)
{
  
   CE_L;
   while(rd_status()&0x80);        //0x80???
   A0_L;
   RD_H;            
   //lcd_para = datax;
   lcd_bus = datax;       
   WR_L;
   WR_H;     
   CE_H;
}
////////初始化1335///////////////////////////////////
void init1335()
{
   wr_cmd80(0x40);          //SYSTEM SET
   wr_dat1335(0x30);       //p1
   wr_dat1335(0x87);       //p2   FX
   wr_dat1335(0x07);      //p3   FY
   wr_dat1335(0x27);        //p4   C/R    27
   wr_dat1335(0x42);      //p5    42   TC/R
   wr_dat1335(0xEF);       //p6   L/F             ef
   wr_dat1335(0x28);       //p7   APL    28
   wr_dat1335(0x00);      //p8          APH
   wr_cmd80(0x44);        //SCROLL
   wr_dat1335(0x00);      //sa1-L
   wr_dat1335(0x00);      //sa1-H
   wr_dat1335(0xF0);       //sL1   
   wr_dat1335(0x00);      //sa2-L   
   wr_dat1335(0x28);     //sa2-H  
   wr_dat1335(0xF0);       //sL2  
   wr_dat1335(0x00);      //sa3-L  
   wr_dat1335(0x50);      //sa3-H  
   wr_dat1335(0x00);      //sa4-L
   wr_dat1335(0x00);      //sa4-H         
   wr_cmd80(0x5a);       //HDOT SCR
   wr_dat1335(0x00);                           
   wr_cmd80(0x58);       //DISP OFF
   wr_dat1335(0x54);                          
   wr_cmd80(0x5d);       //CSR FORM
   wr_dat1335(0x00);      //CRX
   wr_dat1335(0x00);      //CRY          
   wr_cmd80(0x59);       //DISP ON
   wr_dat1335(0x54);        
   wr_cmd80(0x5b);      
   wr_dat1335(0x00);                    
}

//////////全屏//////////////////////////
void Full1335(void)
{   
    unsigned int i;
        wr_cmd80(0x5b);      
    wr_dat1335(0x00);
    SetCursor1335(0x00,0x00);  
    wr_cmd80(0x42);
        for(i=0;i<0x2580;i++)     
       wr_dat1335(0x1F);
    for(;i<0x7fff;i++)     
       wr_dat1335(0xFF);
}
///////清屏/////////////
void clear1335(void)
{   
    unsigned int i;
        wr_cmd80(0x5b);      
    wr_dat1335(0x00);
    SetCursor1335(0x00,0x00);
    wr_cmd80(0x42);
        for(i=0;i<0x2580;i++)     
       wr_dat1335(0x20);
    for(;i<0x7fff;i++)     
       wr_dat1335(0x00);
}
///////设置光标//////////
void SetCursor1335(unsigned char lsb,unsigned char msb)
{
    wr_cmd80(0x46);     //设置光标地址
    wr_dat1335(lsb);
    wr_dat1335(msb);
        wr_cmd80(0x42);        
}

////////////指定范围内写入数据/////////////
void lattice_1335(unsigned int pixelW,unsigned char pixelH,unsigned char dat1,unsigned char dat2)
{
        unsigned char i,k,tmp1,tmp2;
        tmp1 = pixelH/2;
        tmp2 = (unsigned char)(pixelW/8);        
        SetCursor1335(0x80,0x25);
        for(k=0;k            {
                      for(i=0;i                       wr_dat1335(dat1);
               for(i=0;i                       wr_dat1335(dat2);
           }               
}

/*--------------------------------------------------------------*/
//光标定位
//x横坐标: 0~39 320/8=40
//y纵坐标: 0~29 240/8=30
void locate_xy1(unsigned char x, unsigned char y)
{
unsigned int  addr;
addr  =(unsigned int)(y) * AP + x;
wr_cmd80(csrw);       //写入光标地址
wr_dat1335((unsigned char)(addr & 0xff));  //先写低八位
wr_dat1335((unsigned char)(addr >> 8));  //后写高八位
}
       
/*--------------------------------------------------------------*/
//显示字符串
//x横坐标: 0~39 320/8=40
//y纵坐标: 0~29 240/8=30
void show_char(unsigned char x, unsigned char y,  char *string)
{
locate_xy1(x, y);    //光标定位
wr_cmd80(csrform);    //光标形状设置
wr_dat1335(0x07);    //水平显示宽度6
wr_dat1335(0x07);    //线状光标显示,高度8

wr_cmd80(csrdirr);    //光标向右方向移动

wr_cmd80(dispon);    //显示状态开启
wr_dat1335(0x57);    //显示图像,光标1Hz闪烁

wr_cmd80(mwrite);    //显示数据写入
while(*string)
{
  wr_dat1335(*string);
  string++;
}
}       
       
//////////////主函数///////////////////
int main(void)
{  
   _delay_ms(50);
   CPUInit();                    //初始化CPU   
   _delay_ms(50);                                                                                                                  //CPU初始化
   RST_L;                        //复位                                                                                                                            //RESET
   _delay_ms(50);
   RST_H;                        
   _delay_ms(50);      
   init1335();                   //初始化液晶屏          
   //RD_H;
        while(1)
           {
                                                               
                   Full1335();                    //全屏
            _delay_ms(1000);
        clear1335();                   //清屏
                _delay_ms(1000);                                                                                                  
            /*lattice_1335(320,240,0x55,0xaa);                                      //指定范围内写入数据
            _delay_ms(1000);
                lattice_1335(320,240,0xaa,0x55);      
                _delay_ms(1000);
                lattice_1335(320,240,0xff,0x00);      
                _delay_ms(1000);
                lattice_1335(320,240,0x00,0xff);                                                                                       
                _delay_ms(1000);  */
        show_char(0, 0, "Hi");                                        //显示字符串
           };                             
}

最新回复

没能帮上什么忙,不好意思哈,LZ搞起,问题解决后分享下经验  详情 回复 发表于 2014-4-18 14:15
点赞 关注
 

回复
举报

1071

帖子

7

TA的资源

纯净的硅(中级)

沙发
 
怎么个调不通法,是程序编译不过还是字符显示不出来

点评

编译通过,显示不出来  详情 回复 发表于 2014-4-17 14:43
 
 
 

回复

1298

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
这个只有用过这款的才知道……
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

4
 
dj狂人 发表于 2014-4-14 16:07
怎么个调不通法,是程序编译不过还是字符显示不出来

编译通过,显示不出来

点评

LZ能上个图么,我以前也遇到过这种情况,主要是初始化那里不对,不知道跟你是不是一样情况  详情 回复 发表于 2014-4-17 20:01
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

5
 
凉语儿 发表于 2014-4-17 14:43
编译通过,显示不出来

LZ能上个图么,我以前也遇到过这种情况,主要是初始化那里不对,不知道跟你是不是一样情况

点评

什么的图呀??液晶屏上一点反应也没有。电路图:[attachimg]147865[/attachimg].是CPU的初始化还是液晶屏的? 非常谢谢啦~~  详情 回复 发表于 2014-4-18 10:01
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

6
 
dj狂人 发表于 2014-4-17 20:01
LZ能上个图么,我以前也遇到过这种情况,主要是初始化那里不对,不知道跟你是不是一样情况

什么的图呀??液晶屏上一点反应也没有。电路图: .是CPU的初始化还是液晶屏的?     非常谢谢啦~~

点评

还有就是LZ你用的单片机工作电压是多少,5V? 建议用3.3V 的单片机,比如 STC12LE5A60S2,TFT接口电压不合适的话,有影响的  详情 回复 发表于 2014-4-18 13:20
晕,LZ上电的时候背光亮没有,如果亮的话,你先来个刷屏程序试一下有没有效果,如果没效果的话,应该是初始化没得也可能是引脚没接对  详情 回复 发表于 2014-4-18 13:16
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

7
 
凉语儿 发表于 2014-4-18 10:01
什么的图呀??液晶屏上一点反应也没有。电路图:.是CPU的初始化还是液晶屏的?     非常谢谢 ...

晕,LZ上电的时候背光亮没有,如果亮的话,你先来个刷屏程序试一下有没有效果,如果没效果的话,应该是初始化没得也可能是引脚没接对
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

8
 
凉语儿 发表于 2014-4-18 10:01
什么的图呀??液晶屏上一点反应也没有。电路图:.是CPU的初始化还是液晶屏的?     非常谢谢 ...

还有就是LZ你用的单片机工作电压是多少,5V? 建议用3.3V 的单片机,比如 STC12LE5A60S2,TFT接口电压不合适的话,有影响的

点评

背光是亮的呀。、 嗯,是用的5V的单片机,引脚是对的,液晶说明书上是可以接5V的单片机的。。应该还是程序的原因吧。。。  详情 回复 发表于 2014-4-18 13:35
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

9
 
dj狂人 发表于 2014-4-18 13:20
还有就是LZ你用的单片机工作电压是多少,5V? 建议用3.3V 的单片机,比如 STC12LE5A60S2,TFT接口电压不合 ...

背光是亮的呀。、
嗯,是用的5V的单片机,引脚是对的,液晶说明书上是可以接5V的单片机的。。应该还是程序的原因吧。。。

点评

屏幕亮有显示什么吗,还是一片白屏  详情 回复 发表于 2014-4-18 13:49
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

10
 
凉语儿 发表于 2014-4-18 13:35
背光是亮的呀。、
嗯,是用的5V的单片机,引脚是对的,液晶说明书上是可以接5V的单片机的。。应该还是程 ...

屏幕亮有显示什么吗,还是一片白屏

点评

什么都不显示。。一片蓝屏  详情 回复 发表于 2014-4-18 13:53
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

11
 
dj狂人 发表于 2014-4-18 13:49
屏幕亮有显示什么吗,还是一片白屏

什么都不显示。。一片蓝屏

点评

蓝屏!!! RA8835我没用过,我用的是ILI的,我那会的情况是初始化的行设置那里不对,导致上电的时候屏幕闪一下就没什么反应了,LZ还是研究研究数据手册吧  详情 回复 发表于 2014-4-18 14:06
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

12
 
凉语儿 发表于 2014-4-18 13:53
什么都不显示。。一片蓝屏

蓝屏!!! RA8835我没用过,我用的是ILI的,我那会的情况是初始化的行设置那里不对,导致上电的时候屏幕闪一下就没什么反应了,LZ还是研究研究数据手册吧

点评

只能这样了。。。谢啦  详情 回复 发表于 2014-4-18 14:13
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

13
 
dj狂人 发表于 2014-4-18 14:06
蓝屏!!! RA8835我没用过,我用的是ILI的,我那会的情况是初始化的行设置那里不对,导致上电的时候屏幕 ...

只能这样了。。。谢啦

点评

没能帮上什么忙,不好意思哈,LZ搞起,问题解决后分享下经验  详情 回复 发表于 2014-4-18 14:15
 
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

14
 
凉语儿 发表于 2014-4-18 14:13
只能这样了。。。谢啦

没能帮上什么忙,不好意思哈,LZ搞起,问题解决后分享下经验
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表