OpenEdv-开源电子网

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

求助!!12864仿真,详细注释

[复制链接]

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-1-29
在线时间
0 小时
发表于 2013-3-23 00:47:35 | 显示全部楼层 |阅读模式
各位热心网友能看看我这是哪出的问题,是程序问题还是电路问题呀。。。开启仿真是酱紫:





/*AMPIRE 128*64(128行64列)接在传统单片机上的P0口需接上拉电阻,其内部分为两个芯片:
IC1(左屏幕)与IC2(右屏幕)均为8页*64列(64*64点)(一页即8行)
*/
#include"STC12C5A.h"
#include "intrins.h"
#define LCD_Display_ON 0x3f//开显示
#define LCD_Display_OFF 0x3e//关显示
/*起始行的格式为:11------(0-63行)
起始列的格式为:01------(0-63列,与行构成64*64的IC)
起始页的格式为:1011----(0-7页)
*/
#define LCD_Row 0xc0//行首地址
#define LCD_Col 0x40//列首地址
#define LCD_Page 0xb8//页首地址
sbit cs1=P1^0;
sbit cs2=P1^1;
sbit E=P1^2;
sbit RW=P1^3;
sbit RS=P1^4;
/*华工*/
char Hz_hua[]={0x00,0x40,0x22,0x40,0x12,0x40,0x13,0xFC,0x84,0x40,0x48,0x40,0x40,0x40,0x17,0xFE,
0x10,0x00,0x20,0x00,0xE3,0xF8,0x22,0x08,0x22,0x08,0x22,0x08,0x23,0xF8,0x02,0x08
};
char Hz_gong[]={0x01,0x00,0x01,0x08,0x7D,0x10,0x05,0xA0,0x09,0x60,0x31,0x18,0xC5,0x06,0x02,0x00,
0x08,0x10,0x0A,0x14,0x6A,0xD4,0x2C,0x58,0x2A,0x54,0x4A,0x94,0xA9,0x52,0x10,0x20
};
/*延时函数,与函数名字无关,不是延时一毫秒*/ 
void delay_ms(int t)
{
char i,j;
for(i=0;i<t;i++);
for(j=0;j<10;j++);
}
/*状态检查:LCD是否忙*/
void LCD_Busy()
{
  char busy;
E=0;
RS=0;//选择指令模式
RW=1;//选择读
while(1)
{
E=1;//读指令、数据模式
_nop_();
_nop_();//延时一小会
busy=P2;//读取状态标志存储器
_nop_();//延时一小会
E=0;
if((busy&0x80)==0)//检测BF位是否为0
break;
}
}
/*写命令到LCD中*/
void LCD_wcmd(char cmd)
{
  LCD_Busy();//检测忙信号
RS=0;//选择指令模式
RW=0;//选择写
P2=cmd;//往P2口送入要写入的命令
delay_ms(2);//延时一小会
E=1;
delay_ms(2);//延时一小会
E=0;//下降沿写入命令
}
/*写数据到LCD中*/
void LCD_wdat(char dat)
{
  LCD_Busy();//检测忙信号
RS=1;//选择数据模式
RW=0;//选择写
P2=dat;//往P2口送入要写入的数据
delay_ms(2);//延时一小会
E=1;
delay_ms(2);//延时一小会
E=0;//下降沿写入命令
}
/*LCD初始化*/
void LCD_Init()
{
delay_ms(100);//延时一小会
cs1=1;//刚开始关闭两屏
cs2=1;
delay_ms(100);//延时一小会
/*写初始化*/
LCD_wcmd(LCD_Display_OFF);//关闭显示屏
LCD_wcmd(LCD_Page+0);//设第0页为起始页
    LCD_wcmd(LCD_Row+0);//设第0行为起始行
LCD_wcmd(LCD_Col+0);//设第0列为起始列
LCD_wcmd(LCD_Display_ON);//开启显示屏
}
/*清除LCD内存数据*/
void LCD_Clear()
{
  unsigned char j,k;
cs1=0;//开启两个显示屏
cs2=0;
LCD_wcmd(LCD_Page+0);//设第0页为起始页
LCD_wcmd(LCD_Col+0);//设第0列为起始列
for(k=0;k<8;k++)//控制页数0—7,共8页
{
LCD_wcmd(LCD_Page+k);//设置第k页为写入页
for(j=0;j<64;j++) //每页最多可写32个中文或64个ASCII码
{
LCD_wcmd(LCD_Col+j);
LCD_wdat(0x00);//控制列数0—63,共64列,每写入一列,自动加一
}
}
}
/*指定位置显示汉字16*16*/
void hz_LCDDisp16(char page,char column,char* hz)
{
char i=0,j=0;
for(j=0;j<2;j++)
{
LCD_wcmd(LCD_Page+page+j);//设置第j页为写入页
LCD_wcmd(LCD_Col+column);//设第col列为起始列
for(i=0;i<16;i++)
{
LCD_wdat(hz[16*j+i]);
}
}
}
void main()
{
LCD_Init();
LCD_Clear();
cs1=0;
cs2=1;
    hz_LCDDisp16(0,48, Hz_hua);
cs1=1;
cs2=0;
hz_LCDDisp16(0,0,Hz_gong);
while(1);
}



当我的世界不一样,那就让我不一样
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-3-23 10:13:22 | 显示全部楼层
E,RW,RS,CS1,CS2都不用接么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2013-3-23 14:18:02 | 显示全部楼层
http://www.openedv.com/posts/list/13263.htm
有原程序与仿真,可以下载看看
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-1-29
在线时间
0 小时
 楼主| 发表于 2013-3-25 22:59:58 | 显示全部楼层
@正点原子 接了啊,在那单片机的左边。。PS:程序没有这么长的,我复制时多复制了一遍。。。
当我的世界不一样,那就让我不一样
回复 支持 反对

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-1-29
在线时间
0 小时
 楼主| 发表于 2013-3-25 23:17:54 | 显示全部楼层
感觉问题应该不是在电路图,我照书上接的啊。。。可是程序感觉也没错啊······

当我的世界不一样,那就让我不一样
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-4-25 11:14:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 11:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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