OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3938|回复: 1

单片机液晶程序,单片机进入掉电模式液晶熄屏,唤醒后液晶不显示?

[复制链接]

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-3-16
在线时间
30 小时
发表于 2018-7-17 11:12:07 | 显示全部楼层 |阅读模式
5金钱
各位大神,在使用单片机控制液晶的程序是,使用单片机的掉电模式使其进入待机状态,进入待机状态时关闭液晶电源,达到熄屏的效果,单片机唤醒后,立即打开液晶电源,液晶无显示。部分程序如下:#define CKSEL (*(uchar volatile xdata *)0xfe00)
#define CLKDIVE (*(uchar volatile xdata *)0xfe01)
#define IRC24MCR (*(uchar volatile xdata *)0xfe02)

sfr P_SW2=0xba;

sfr P1M0=0x92;
sfr P1M1=0x91;
sfr P3M0=0xb2;
sfr P3M1=0xb1;
sfr P5M0=0xca;
sfr P5M1=0xc9;

sbit _VCC=P1^1;        //液晶电源控制引脚,高电平有效
sbit _DAT=P1^6; //HT1621数据引脚
sbit _CS=P1^4; //HT1621使能引脚
sbit _WR=P1^5; //HT1621时钟引脚
sbit _Vlcd=P1^7;//液晶/背光控制引脚,低电平有效
sbit KEY=P1^0;

uchar code table1[]={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf};//数码1~4显示0~9元素
uchar code table2[]={0xfa,0x60,0xd6,0xf4,0x6c,0xbc,0xbe,0xe0,0xfe,0xfc};
uint sum1=0,sum=50;        //sum为波形数量
uchar sum2=0;

void delay_ms(uint z)                //主时钟频率24MHz
{
        uchar i=24, j=85;
        while(z--)
        {
                do
                {
                        while (--j);
                } while (--i);
        }
}

void Init()
{
        P_SW2=0x80;
        CKSEL=0x00;
        P_SW2=0x00;
        P1M0=0x00;
        P1M1=0x01;
        P3M0=0x00;
        P3M1=0x00;
        TMOD=0x00;
        IT0=1;
        EX0=1;
        TR0=1;
        ET0=1;
        EA=1;
        _Vlcd=0;
        _VCC=1;
}
void main()
{
        Init();
        LCD_Init();

        while(1)
        {
                if(KEY==0)
                {
                        delay_ms(10);
                        if(KEY==0)
                        {
                                ET0=0;
                                _Vlcd=1;                //关闭液晶背光灯及液晶驱动电源
                                PCON=0x02;
                        }
                }
                sum2=sum%16;
                sum1=sum/16;
               
                display2(sum1,sum2,0,0,0,0);
                delay_ms(1);
        }
}

void INIT0() interrupt 0
{
        ET0=1;
        _Vlcd=0;
}

void Timer0() interrupt 1
{
        uint m;
        TL0=0x40;
        TH0=0xA2;
        m++;
        if(m==1000)
        {
                m=0;
                sum++;
        }
}

最佳答案

查看完整内容[请看2#楼]

在进入掉电模式时,原来写入1621B的命令将会全部丢失掉,需要重新写入。在外部中断子函数里,再次对液晶进行初始化就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-3-16
在线时间
30 小时
 楼主| 发表于 2018-7-17 11:12:08 | 显示全部楼层
在进入掉电模式时,原来写入1621B的命令将会全部丢失掉,需要重新写入。在外部中断子函数里,再次对液晶进行初始化就可以了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 18:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表