找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4370|回复: 6
收起左侧

51单片机驱动LCD12864写的程序运行后流水灯和数码管乱闪,显示屏只亮没显示

[复制链接]
ID:129583 发表于 2016-7-7 18:09 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>

#define uchar unsigned char
#define uint unsigned int
#define LCD_data  P0
sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_EN=P2^5;
sbit LCD_PSB=P1^2;
sbit wela =P2^6;
sbit dula =P2^7;


void delay_12864(uint x)
{
uint i,j;
for(j=0;j<x;j++)
     for(i=0;i<110;i++)        ;
}

void busychk_12864(void)
{
unsigned int timeout = 0;
LCD_EN = 0;
LCD_RS = 0;
LCD_RW= 1;
LCD_EN = 1;
while( 0x80 && ++timeout != 0);  //忙状态检测,等待超时时间为60ms
LCD_EN = 0;
}


//写命令子程序
void wrtcom_12864(unsigned char com)
{
busychk_12864();
LCD_EN = 0;
LCD_RS = 0;
LCD_RW = 0;
P0 = com;
LCD_EN = 1;
delay_12864(50);    //50us使能延时!!!注意这里,如果是较快的CPU应该延时久一些
LCD_EN = 0;  
}

//写数据子程序
void wrtdat_12864(unsigned char dat)
{
busychk_12864();
LCD_EN= 0;
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
P0 = dat;
delay_12864(50);    //使能延时!!!注意这里,如果是较快的CPU应该延时久一些
LCD_EN = 0;  
}

void lcd_init()
{  

LCD_PSB=1;
wrtcom_12864(0X30);
delay_12864(5);
wrtcom_12864(0X02);
delay_12864(5);
wrtcom_12864(0X0C);
delay_12864(5);
wrtcom_12864(0X01);
delay_12864(5);
wrtcom_12864(0X06);
delay_12864(5);
wrtcom_12864(0X80);
delay_12864(5);
}

void main()
{

  uint i;

delay_12864(100);      //启动延时
   lcd_init();
wrtcom_12864(0x80);
for(i=0;i<16;i++)
   wrtdat_12864(0x00+i);
  wrtcom_12864(0x90);
for(i=0;i<16;i++)
   wrtdat_12864(0x10+i);
wrtcom_12864(0x88);
for(i=0;i<16;i++)
   wrtdat_12864(0x30+i);
wrtcom_12864(0x98);
for(i=0;i<16;i++)
   wrtdat_12864(0x40+i);

  delay_12864(50);
           while( 1 ) ;

}





回复

使用道具 举报

ID:111634 发表于 2016-7-7 21:34 | 显示全部楼层
主程序没有安排好12864、流水灯和数码管依次轮流工作的时序,互相有干扰。
回复

使用道具 举报

ID:57657 发表于 2016-7-8 00:20 | 显示全部楼层
用proteus仿真没有异常的话就能排除是程序的错误,否则硬件有干扰。
回复

使用道具 举报

ID:129583 发表于 2016-7-8 15:14 | 显示全部楼层
zl2168 发表于 2016-7-7 21:34
主程序没有安排好12864、流水灯和数码管依次轮流工作的时序,互相有干扰。

那应该怎么改呢
回复

使用道具 举报

ID:129583 发表于 2016-7-8 15:15 | 显示全部楼层
npn 发表于 2016-7-8 00:20
用proteus仿真没有异常的话就能排除是程序的错误,否则硬件有干扰。

用的KEIL,这个怎么改改、?
回复

使用道具 举报

ID:111634 发表于 2016-7-8 21:58 | 显示全部楼层
流水灯最快0.1秒流一次。在此时间内足够让12864更新显示。怎么会互有干扰?
回复

使用道具 举报

ID:129825 发表于 2016-7-25 17:28 | 显示全部楼层
数码管 流水灯 分开写
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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