3313|4

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:怎样编程实现89c51控制320240液晶屏显示的问题 [复制链接]

用51控制一个320×240的液晶屏,该液晶屏的驱动芯片是ra8835,需要在屏幕上显示四个设备名称,单片机51的P2口通过继电器连接那四个设备,另有两个按键接在51的2个管脚上,要实现的功能是一个按键用来选择哪个设备,同时能在屏幕上显示当前选择的设备名称,然后按下另一个按键确认该设备被选中,同时该设备接通(就是接通电源)。要编一个能实现这个功能的程序,不知从哪入手,怎么设置才能在我想要的屏幕位置上显示设备名称,很混乱,请大家指教,下面是还没弄完的程序,只是一个基本的框框,按键和显示的还没有,不知道后面该怎么编了,请大家有时间帮忙看下,先谢了!

#include
#include


#define uchar unsigned char
#define        uint  unsigned int


#define           system_set    0x40                //初始状态
#define           sleep_in         0x53               
#define           display_on         0x58                //显示状态
#define           display_off         0x59
#define    scroll         0x44                //设置显示开始地址,显示区域
#define           cgram_adr         0x5c
#define    csrdir_right  0x4c
#define           csrdir_low         0x4f
#define    hdot_scr         0x5a               
#define           ovlay         0x5b
#define           csrw                  0x46
#define           csrr                 0x47
#define           mwrite         0x42
#define    mread         0x43
#define           sad1l         0x00
#define           sad1h         0x00
#define           sl1                  0xef
#define    sad2l         0x00
#define           sad2h         0x10
#define           sl2                 0xef
#define           sad3l         0x00
#define           sad3h         0x18
#define           sl3                 0x00
#define           apl                 0x28
#define           aph                 0x00
#define           cr                 0x27                //c/r=(320/8-1)=39
#define           lf                 0xef
#define    tcr                 0x41


//RA8835_DS端口定义
#define           lcd_data         p0                //db0-db7->p0   数据口
#define           lcd_a0         p1.0
#define           lcd_wr         p1.1
#define           lcd_rd         p1.2
#define    lcd_cs         p1.3                //片选信号,L有效
#define           lcd_sel1         p1.4
#define           lcd_rst         p1.6                //复位,L有效

#define           key1                 p3.3                //选择键
#define           key2                 p3.4                //确认键

uchar n1=240;        uchar n2=40;

void wr_ctrl(uchar ctrldata)        //写指令
{
        lcd_a0=1;
        lcd_ctrl=ctrldata;
        lcd_wr=0;
        _nop_();
        lcd_wr=1;
}

void wr_data(uchar dat)                //写数据
{
        lcd_a0=0;
        lcd_data=dat;
        lcd_wr=0;
        _nop_();
        lcd_wr=1;
}

void delay_ms(uint t)                //延时1ms (12MHz)
{
        uint i,j;
        for(i=0;i         for(j=0;j<125;j++)
        {;}
}

void set_cursor(uchar cursor_high,uchar cursor_low)                //设置光标
{
        wr_ctrl(csrw);
        wr_data(cursor_high);
        wr_data(cursor_low);
}

void clear_screen()                //清屏
{
        uint i;
       
        wr_ctrl(csrdir_right);
        set_cursor(sad1h,sad1l);
        for(i=0;i<1200;i++)
        wr_data(0x20);

        set_cursor(sad2h,sad2l)
        for(i=0;i<9600;i++)
        wr_data(0x00);
}

void init(void)                        //初始化
{
        wr_ctrl(0x40);                //system_set       
        wr_data(0x30);
        wr_data(0x87);
        wr_data(0x07);
        wr_data(0x27);
        wr_data(0x41);
        wr_data(0xef);
        wr_data(0x28);
        wr_data(0x00);

        wr_ctrl(0x44);                //scroll
        wr_data(0x00);
        wr_data(0x00);
        wr_data(0xef);
        wr_data(0x00);
        wr_data(0x10);
        wr_data(0xef);

        wr_ctrl(0x5a);                //hdot_scr
        wr_data(0x00);

        wr_ctrl(0x5b);                //ovlay
        wr_data(0x00);

        wr_ctrl(0x58);                //disp_off
        wr_data(0x16);

        wr_ctrl(0x5d);                //csr_form
        wr_data(0x04);
        wr_data(0x86);

        wr_ctrl(0x46);                //csrw
        wr_data(0x00);
        wr_data(0x00);

        wr_ctrl(0x59);                //disp_on

        wr_ctrl(0x4c);                //csr_dir

}

void dis_english(uchar curhigh,uchar curlow,uchar *engku)      //显示字符
{
        wr_ctrl(0x4c);                        //csrdir_right 光标右移
        set_cursor(curhigh,curlow);
        while(*engku>0)
        {
                wr_data(ctrl);
                *engku++;
        }
}

void dis_hz(uchar curhigh,uchar curlow)
{
        uchar i,j,m,addl,addh;
        addl=curlow,addh=curhigh;
       
        for(m=0;m<8;i++)
        {
                for(i=0;i<16;i++)
                {
                   wr_ctrl(0x4c);
                   set_cursor(addh,addl);
                   for(j=0;j<2;j++)
                   wr_data(ha_tab[m*32+i*2+j]);
                   addl+=n2;
                   if(addl                         addh++;
                   curlow+=2;
                   addl=curlow;
                   if(addl<2)
                   curhigh+=1;
                   addh=curhigh;
                }
        }
}

void main(void)
{     
        lcd_data=0xff;
        p1=0xff;
       
        lcd_cs=0;
        lcd_sel=0;

        lcd_rst=0;
        delay_ms(100);
        lcd_rst=1;
        delay_ms(100);

        init();

        dis_hz(0x15,0x0c);
       
        while(1)
        {}
}

uchar code ha_tab[]={要显示的汉字}                //汉字取模

最新回复

准备玩玩320240 和12864操作不一样吗?  详情 回复 发表于 2009-3-24 15:43
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
默认开始是1号,  等待确认。。
按一次选择键,显示2号,等待确认。。
再按一次选择键,显示3号,等待确认。。
当显示4号时,按选择键,显示1号,等待确认。。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
首先把屏驱动起来

然后设一个左移右移键,循环点设备及显示设备名
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个还没接触到呢,也跟着学习学习!貌似按键的部分我会
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
准备玩玩320240 和12864操作不一样吗?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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