专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
proteus
【毕设求教】【急】为什么我的仿真里12864没显示
2019-07-18 09:32
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
proteus
14549
10
1613
让人帮做了个实物,实物能完美运行所以代码应该没问题,但是
仿真
里的12864就是没显示,大神帮我看一下是不是我12864接的不对。。。
仿真运行图
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
温柔以待
1楼-- · 2019-07-19 04:29
融稔 发表于 2016-5-24 14:21
得看看你的程序
#include "reg52.h"
#include "typedef.h"
#include "delay.h"
#include "12864.h"
sbit LCD_CLK = P0^5;
sbit LCD_SID = P0^6;
sbit LCD_CS = P0^7;
xdata uchar LCD_Buf[64]=0;
uchar SparkF = 0; //闪烁开关
uchar SparkA = 0; //闪烁缓存地址
uchar SparkL = 1; //闪烁长度默认1
uchar LCD_RefFlag = 0;
void LCD_Write_Byte(uchar Data) //往12864写一个字节
{
uchar i;
for(i=0;i<8;i++)
{
LCD_CLK = 0; //时钟拉低
if(Data & 0x80)
{ LCD_SID = 1; }
else
{ LCD_SID = 0; }
LCD_CLK = 1; //时钟拉高,传入1bit数据
Data = Data<<1; //数据左移一位
}
}
void LCD_Write_Command(uchar COMMAND) //写控制命令
{
LCD_CS = 1;
LCD_Write_Byte(SENDCOMM);
LCD_Write_Byte(COMMAND & 0XF0); //写入高四位
LCD_Write_Byte((COMMAND << 4) & 0XF0); //写入低四位
LCD_CS = 0;
}
void LCD_Write_Data(uchar Data) //写数据
{
LCD_CS = 1;
LCD_Write_Byte(SENDDATA);
LCD_Write_Byte(Data & 0XF0); //写入高四位
LCD_Write_Byte((Data << 4)&0XF0); //写入低四位
LCD_CS = 0;
}
void LCD_XY(uchar x,uchar y) //设置显示位置 X(1~16),Y(1~4)
{
switch(y)
{
case 1:LCD_Write_Command(0X7F+x);break;
case 2:LCD_Write_Command(0X8F+x);break;
case 3:LCD_Write_Command(0X87+x);break;
case 4:LCD_Write_Command(0X97+x);break;
default: break;
}
}
void LCD_Init(void)
{
Delay_1ms(100);
LCD_Write_Command(0x34);//一次送8位数据
LCD_Write_Command(0x30);//基本操作指令
LCD_Write_Command(0x0C);//整体显示,游标off,
LCD_Write_Command(0x01);//清屏
Delay_1ms(100);
LCD_Clr();
}
//void Display_Char(uchar x,uchar y, uchar Char)
//{
// uchar add = 2*(x-1)+16*(y-1);
// LCD_Buf[add]=Char;
// LCD_RefFlag = 1;
//}
void Display_String(uchar x,uchar y,uchar *string)
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
while(*string!=' ')
{
LCD_Buf[add]=*string;
add++;
string++;
}
LCD_RefFlag = 1;
}
//void Display_u8(uchar x,uchar y,uchar num)
//{
// uchar buff[4]=0;
//
// buff[0]=num / 100 +'0';
// buff[1]=num%100/10 +'0';
// buff[2]=num%10+'0';
// buff[3]=' ';
// if(buff[0]=='0')
// {
// buff[0]=' ';
// if(buff[1]=='0')
// buff[1]=' ';
// }
// Display_String(x,y,buff);
//}
void LCD_TimeDis(uchar x,uchar y,uchar *time) //[0][1][2] 时分秒
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
LCD_Buf[add+0] = time[0] /10 +'0';
LCD_Buf[add+1] = time[0] %10 +'0';
LCD_Buf[add+2] = ':';
LCD_Buf[add+3] = time[1] /10 +'0';
LCD_Buf[add+4] = time[1] %10 +'0';
LCD_Buf[add+5] = ':';
LCD_Buf[add+6] = time[2] /10 +'0';
LCD_Buf[add+7] = time[2] %10 +'0';
LCD_RefFlag = 1;
}
void LCD_WeekDis(uchar x,uchar y,uchar week)
{
switch(week)
{
case 1:{ Display_String(x,y,"星期一"); }break;
case 2:{ Display_String(x,y,"星期二"); }break;
case 3:{ Display_String(x,y,"星期三"); }break;
case 4:{ Display_String(x,y,"星期四"); }break;
case 5:{ Display_String(x,y,"星期五"); }break;
case 6:{ Display_String(x,y,"星期六"); }break;
case 7:{ Display_String(x,y,"星期日"); }break;
default:{ Display_String(x,y," "); }break;
}
}
void LCD_DateDis(uchar x,uchar y,uchar *Date) //[0][1][2 年月日
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
Display_String(x+2,y,"年");
Display_String(x+4,y,"月");
Display_String(x+6,y,"日");
/*--------------年份----------------------*/
LCD_Buf[add] = '2';
LCD_Buf[add+1] = '0';
LCD_Buf[add+2] = Date[0] /10 +'0';
LCD_Buf[add+3] = Date[0] %10 +'0';
/*--------------月份----------------------*/
LCD_Buf[add+6] = Date[1] /10 +'0';
LCD_Buf[add+7] = Date[1] %10 +'0';
/*--------------日期----------------------*/
LCD_Buf[add+10] = Date[2] /10 +'0';
LCD_Buf[add+11] = Date[2] %10 +'0';
LCD_RefFlag = 1;
}
void LCD_Clr(void)
{
uchar i = 0;
LCD_RefFlag = 0;
for(i=0;i<64;i++)
{
LCD_Buf
=0x20;
}
LCD_RefFlag = 1;
}
void LCD_Ref(void) //更新12864显示缓存
{
uchar i = 0;
uchar j=0;
LCD_XY(1,1);
LCD_RefFlag = 0;
for(i=0;i<64;i++)
{
if(i==16)
LCD_XY(1,2);
else if(i==32)
LCD_XY(1,3);
else if(i==48)
LCD_XY(1,4);
LCD_Write_Data(LCD_Buf
);
}
LCD_RefFlag = 1;
}
这是12864的程序
加载中...
融稔
2楼-- · 2019-07-19 04:52
你的仿真图和下面那个原理图接线不一样啊。。。连接12864的I/O口都没一致。特别是CS,SID,SCLK,你按照下面那个图接线就好了
加载中...
chenan1212
3楼-- · 2019-07-19 09:27
精彩回答 2 元偷偷看……
加载中...
chenan1212
4楼-- · 2019-07-19 12:15
你程序里的液晶的传输方式是串行,你仿真用的是并行的
加载中...
上一页
1
2
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
为什么Proteus 仿真点阵字体缺笔画 而且速度奇慢
7 个回答
2012~~单片机C语言程序设计实训100例-基于8051+Proteus仿真(第2版)
27 个回答
新手求帮忙解决proteus的问题
1 个回答
大家好,请问用三菱plc仿真软件跟mcgs组态软件怎么样连接?
1 个回答
proteus出问题,不能用
3 个回答
数字频率计 求编程(汇编或C语言)
1 个回答
求单片机与PC机串行通信
2 个回答
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
proteus
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "reg52.h"
#include "typedef.h"
#include "delay.h"
#include "12864.h"
sbit LCD_CLK = P0^5;
sbit LCD_SID = P0^6;
sbit LCD_CS = P0^7;
xdata uchar LCD_Buf[64]=0;
uchar SparkF = 0; //闪烁开关
uchar SparkA = 0; //闪烁缓存地址
uchar SparkL = 1; //闪烁长度默认1
uchar LCD_RefFlag = 0;
void LCD_Write_Byte(uchar Data) //往12864写一个字节
{
uchar i;
for(i=0;i<8;i++)
{
LCD_CLK = 0; //时钟拉低
if(Data & 0x80)
{ LCD_SID = 1; }
else
{ LCD_SID = 0; }
LCD_CLK = 1; //时钟拉高,传入1bit数据
Data = Data<<1; //数据左移一位
}
}
void LCD_Write_Command(uchar COMMAND) //写控制命令
{
LCD_CS = 1;
LCD_Write_Byte(SENDCOMM);
LCD_Write_Byte(COMMAND & 0XF0); //写入高四位
LCD_Write_Byte((COMMAND << 4) & 0XF0); //写入低四位
LCD_CS = 0;
}
void LCD_Write_Data(uchar Data) //写数据
{
LCD_CS = 1;
LCD_Write_Byte(SENDDATA);
LCD_Write_Byte(Data & 0XF0); //写入高四位
LCD_Write_Byte((Data << 4)&0XF0); //写入低四位
LCD_CS = 0;
}
void LCD_XY(uchar x,uchar y) //设置显示位置 X(1~16),Y(1~4)
{
switch(y)
{
case 1:LCD_Write_Command(0X7F+x);break;
case 2:LCD_Write_Command(0X8F+x);break;
case 3:LCD_Write_Command(0X87+x);break;
case 4:LCD_Write_Command(0X97+x);break;
default: break;
}
}
void LCD_Init(void)
{
Delay_1ms(100);
LCD_Write_Command(0x34);//一次送8位数据
LCD_Write_Command(0x30);//基本操作指令
LCD_Write_Command(0x0C);//整体显示,游标off,
LCD_Write_Command(0x01);//清屏
Delay_1ms(100);
LCD_Clr();
}
//void Display_Char(uchar x,uchar y, uchar Char)
//{
// uchar add = 2*(x-1)+16*(y-1);
// LCD_Buf[add]=Char;
// LCD_RefFlag = 1;
//}
void Display_String(uchar x,uchar y,uchar *string)
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
while(*string!=' ')
{
LCD_Buf[add]=*string;
add++;
string++;
}
LCD_RefFlag = 1;
}
//void Display_u8(uchar x,uchar y,uchar num)
//{
// uchar buff[4]=0;
//
// buff[0]=num / 100 +'0';
// buff[1]=num%100/10 +'0';
// buff[2]=num%10+'0';
// buff[3]=' ';
// if(buff[0]=='0')
// {
// buff[0]=' ';
// if(buff[1]=='0')
// buff[1]=' ';
// }
// Display_String(x,y,buff);
//}
void LCD_TimeDis(uchar x,uchar y,uchar *time) //[0][1][2] 时分秒
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
LCD_Buf[add+0] = time[0] /10 +'0';
LCD_Buf[add+1] = time[0] %10 +'0';
LCD_Buf[add+2] = ':';
LCD_Buf[add+3] = time[1] /10 +'0';
LCD_Buf[add+4] = time[1] %10 +'0';
LCD_Buf[add+5] = ':';
LCD_Buf[add+6] = time[2] /10 +'0';
LCD_Buf[add+7] = time[2] %10 +'0';
LCD_RefFlag = 1;
}
void LCD_WeekDis(uchar x,uchar y,uchar week)
{
switch(week)
{
case 1:{ Display_String(x,y,"星期一"); }break;
case 2:{ Display_String(x,y,"星期二"); }break;
case 3:{ Display_String(x,y,"星期三"); }break;
case 4:{ Display_String(x,y,"星期四"); }break;
case 5:{ Display_String(x,y,"星期五"); }break;
case 6:{ Display_String(x,y,"星期六"); }break;
case 7:{ Display_String(x,y,"星期日"); }break;
default:{ Display_String(x,y," "); }break;
}
}
void LCD_DateDis(uchar x,uchar y,uchar *Date) //[0][1][2 年月日
{
uchar add = 2*(x-1)+16*(y-1);
LCD_RefFlag = 0;
Display_String(x+2,y,"年");
Display_String(x+4,y,"月");
Display_String(x+6,y,"日");
/*--------------年份----------------------*/
LCD_Buf[add] = '2';
LCD_Buf[add+1] = '0';
LCD_Buf[add+2] = Date[0] /10 +'0';
LCD_Buf[add+3] = Date[0] %10 +'0';
/*--------------月份----------------------*/
LCD_Buf[add+6] = Date[1] /10 +'0';
LCD_Buf[add+7] = Date[1] %10 +'0';
/*--------------日期----------------------*/
LCD_Buf[add+10] = Date[2] /10 +'0';
LCD_Buf[add+11] = Date[2] %10 +'0';
LCD_RefFlag = 1;
}
void LCD_Clr(void)
{
uchar i = 0;
LCD_RefFlag = 0;
for(i=0;i<64;i++)
{
LCD_Buf=0x20;
}
LCD_RefFlag = 1;
}
void LCD_Ref(void) //更新12864显示缓存
{
uchar i = 0;
uchar j=0;
LCD_XY(1,1);
LCD_RefFlag = 0;
for(i=0;i<64;i++)
{
if(i==16)
LCD_XY(1,2);
else if(i==32)
LCD_XY(1,3);
else if(i==48)
LCD_XY(1,4);
LCD_Write_Data(LCD_Buf);
}
LCD_RefFlag = 1;
}
这是12864的程序
一周热门 更多>