OpenEdv-开源电子网

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

我用单片机读GT21H16S2Y字库芯片,但是读出来数组全是0xff,为什么啊?

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2015-5-9
在线时间
0 小时
发表于 2015-5-9 10:52:21 | 显示全部楼层 |阅读模式
5金钱
求一个正确的程序
这是我写的程序
[mw_shl_code=c,true]#include<stc12c5a60s2.h> #define uchar unsigned char #define uint unsigned int uint GBcode; xdata uchar a_dot[32],a_dot_1[256]; void save(); void led(); //uchar temp; /*------------------------------------------- 引脚连接宏定义 ------------------------------------------------*/ sbit GT_CS = P1^0; sbit GT_SO = P3^5; sbit GT_SI = P1^2; sbit GT_CLK = P1^3; /*点阵定义*/ sbit LA = P0^0; //138译码输入 sbit LB = P0^1; sbit LC = P0^2; sbit LD = P0^3; //138译码输入 sbit R1_595 = P0^4; //红数据输入1 sbit R2_595 = P0^5; //红数据输入2 sbit EN = P2^1; //输出使能 sbit LT = P2^2; //锁存 sbit SK = P2^3; //时钟 void delay(uchar i) { uchar x,y; for(x=i;x>0;x--) for(y=110;y>0;y--); } /*-------------------------------------------------- 函数名 :ReadByte 功能 :读取任意地址数据 输入参数: 输出参数: --------------------------------------------------- */ unsigned char ReadByte(unsigned long Address) { unsigned char i = 0,j = 0,temp = 0x0B; GT_CS = 0; //发送指令 for(i=0; i<8; i++) { GT_CLK = 0; GT_SI = temp&0x80; temp <<= 1; GT_CLK = 1; } //发送地址 for(j=1; j<4; j++) { temp = ( (unsigned char*)&Address )[j] ; for(i=0; i<8; i++) { GT_CLK = 0; GT_SI =temp & 0x80; temp <<= 1; GT_CLK = 1; } } //发送空字节 for(i=0; i<8; i++) { GT_CLK = 0; GT_SI = 0; GT_CLK = 1; } //接收数据 for(j=0;j<32;j++) { for(i=0; i<8; i++) { GT_CLK = 0; temp <<= 1; if(GT_SO)temp |= 0x01; else temp &= 0xFE; GT_CLK = 1; } a_dot[j]=temp; } GT_CS = 1; } /*GB2312 功能: 把Unicode内码转换为GB2312内码 参数: srcCode:输入Unicode内码串。 destCode:转换后得到的GB2312内码串。*/ // //uint UnicodeToGB2312(uint code1) //{ //unsigned char i = 0,j = 0,temp = 0x0b; //unsigned long ptr,result=0; //uchar GB2312Code[2]; //unsigned long UToGb2312Buff =0x67d70; //uint h; ////uchar UCSadd1,UCSadd2,UCSadd3; //if(code1<0xa0) result=1; //else if(code1<=0xf7) h=code1-160; //else if(code1<0x2c7) result=1; //else if(code1<=0x2c9) h=code1-160-463; //else if(code1<0x2010) result=1; //else if(code1<=0x2312) h=code1-160-463-7494; //else if(code1<0x2460) result=1; //else if(code1<=0x2642) h=code1-160-463-7494-333; //else if(code1<0x3000) result=1; //else if(code1<=0x3017) h=code1-160-463-7494-333-2493; //else if(code1<0x3220) result=1; //else if(code1<=0x3229) h=code1-160-463-7494-333-2493-520; //else if(code1<0x4e00) result=1; //else if(code1<=0x9b54) h=code1-160-463-7494-333-2493-520-7126; //else if(code1<0x9c7c) result=1; //else if(code1<=0x9ce2) h=code1-160-463-7494-333-2493-520-7126-295; //else if(code1<0x9e1f) result=1; //else if(code1<=0x9fa0) h=code1-160-463-7494-333-2493-520-7126-295-316; //else if(code1<0xe76c) result=1; //else if(code1<=0xe774) h=code1-160-463-7494-333-2493-520-7126-295-316-18379; //else if(code1<0xff00) result=1; //else if(code1<=0xff5f) h=code1-160-463-7494-333-2493-520-7126-295-316-18379-6027; //else if(code1<0xffe0) result=1; //else if(code1<=0xffe5) h=code1-160-463-7494-333-2493-520-7126-295-316-18379-6027-128; //else result=1; //if(result==0) //{ // ptr = UToGb2312Buff + (h<<1); //UCS2转GB2312在芯片的首地址 //} //else //{ // ptr=0x0000a1a1; //} ////UCSadd1=ptr/65536; ////UCSadd2=ptr/256; ////UCSadd3=ptr%256; //GT_CS = 0; // //发送指令 // for(i=0; i<8; i++) // { // GT_CLK = 0; // GT_SI = temp&0x80; // temp <<= 1; // GT_CLK = 1; // } // for(j=1; j<4; j++) // { // temp = ( (unsigned char*)&ptr )[j] ; // for(i=0; i<8; i++) // { // GT_CLK = 0; // GT_SI =temp & 0x80; // temp <<= 1; // GT_CLK = 1; // } // // } // //发送空字节 // for(i=0; i<8; i++) // { // GT_CLK = 0; // GT_SI = 0; // GT_CLK = 1; // } // for(j=0;j<2;j++) // { // for(i=0;i<8;i++) // { // temp=temp<<1; // GT_CLK = 0; // GT_CLK = 1; // if(GT_SO) temp++; // } // GB2312Code[j]=temp; // } // GT_CS=1 ; // GBcode=GB2312Code[0]*256+GB2312Code[1]; //高地位组合 // return (GBcode);//返回GB2312汉字编码 // //} void hangout(uchar hang) { LA=hang&0x01; LB=hang&0x02; LC=hang&0x04; LD=hang&0x08; } void Send_595(uchar dat,uchar dat1)//双参数,时钟、单锁存共用,双数据输出 { uchar i; for(i=0; i<8; i++) { SK = 0;//拉低同步时钟 dat >>= 1;//数据移位 R1_595=~CY;//数据位输出 dat1>>=1;//数据1移位 R2_595=~CY;//数据1位输出 SK = 1;//恢复同步时钟 } } void led(uint GB_code) { uchar MSB,LSB,ADH; unsigned long Address,BaseAdd; MSB= GB_code/256; LSB= GB_code%256; BaseAdd=0; if(MSB == 0xA9 && LSB >=0xA1) Address =(282 + (LSB - 0xA1))*32+ BaseAdd; else if(MSB >=0xA1 && MSB <= 0xA3 && LSB >=0xA1) Address =( (MSB - 0xA1) * 94 + (LSB - 0xA1))*32+ BaseAdd; else if(MSB >=0xB0 && MSB <= 0xF7 && LSB >=0xA1) Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd; // ADH=Address/0x10000; delay(2); ReadByte(Address); delay(2); } void main() { unsigned int j; // uchar temp,temp1; P3M1=0X10; P3M0=0X00; // UnicodeToGB2312(0x554a); led(0xB0A2); delay(2); while(1) { for(j=0;j<16;j++) { Send_595(a_dot[2*j],0);Send_595(a_dot[2*j+1],0); Send_595(0,0);Send_595(0,0); Send_595(0,0);Send_595(0,0); Send_595(0,0);Send_595(0,0); LT=0; delay(2); LT=1;//锁存 hangout(j);//行选 EN=0;//开显示0 delay(1);//显示延时。 EN=1;//关显示 1 } } } [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-9 23:07:06 | 显示全部楼层
回复

使用道具 举报

32

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2012-3-30
在线时间
321 小时
发表于 2015-5-12 15:51:34 | 显示全部楼层
把程序做几步调试,先做一个字符表用查表的方式送595显示,正确后再读字库数据并显示。
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
20
金钱
20
注册时间
2015-4-13
在线时间
0 小时
发表于 2016-6-7 11:27:16 | 显示全部楼层
我也遇到同样的问题,有的字通过内码可以读出数据,但感觉数据错误,有的字的不能读出,读出全为0xFF
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2016-5-27
在线时间
91 小时
发表于 2016-6-19 19:05:46 | 显示全部楼层
多看看程序,多半是程序有问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 15:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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