📄 pinyin.lst
字号:
C51 COMPILER V8.02 PINYIN 04/10/2008 10:43:47 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PINYIN
OBJECT MODULE PLACED IN .\xiazai\pinyin.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE daima\pinyin.c BROWSE DEBUG OBJECTEXTEND PRINT(.\pinyin.lst) OBJECT(.\xiaza
-i\pinyin.obj)
line level source
1 #include"reg51.h"
2 #define baseaddr 0x1f36f0;//0; //根据字库芯片的实际地址进行修改(见数据手册)
3 // 读字库芯片****************************************
4 extern void sendcmd(unsigned char cmd);
5 extern void sendaddress(unsigned long address);
6 extern void Readtodisp_hanzi(unsigned char *hzstr);
7 extern void write_eight_byte(unsigned char *p,unsigned char ADDRH);
8 extern unsigned char read_eight_byte(unsigned char *p,unsigned char ADRH);
9
10 sbit GT32_CS=P1^4; //字库芯片使能
11 sbit GT32_CLK=P1^5; //字库芯片时钟线
12 sbit GT32_SI=P1^7; //字库芯片输入数据线
13 sbit GT32_SO=P1^6; //字库芯片输出数据线
14
15 unsigned char readbyte(unsigned long adrr);
16 void pyInit();
17 void Input_py(char *tmppy);
18 void locate_hz();
19 void Pre_hz();
20 void Next_hz();
21
22 typedef struct {
23 unsigned char py[6]; //拼音 (6BYTE)
24 unsigned short begin; //对应的码表起始序号 (2BYTE)
25 } PYCODETABLE ; // (8BYTE)
26 xdata int pyfd; //拼音码表句柄
27 unsigned short xdata pysum; //拼音组合的个数
28 unsigned short xdata hzsum; //码表中的汉字个数
29 unsigned short xdata pyidx[26]; //以26 个英文字母开头的拼音串索引
30 unsigned short xdata pyseek; //拼音查找的开始位置 ,移动指针用
31
32 unsigned short xdata next_pyseek=0;
33
34 unsigned short xdata firsthz=0; //第一个汉字所在位置,为了用hzseek 计算最后一个拼音的汉字个数
35
36 unsigned short xdata hzseek=0x2000; //汉字查找的开始位置,curhz 移动指针用
37
38 unsigned char xdata curhz=0; //当前显示汉字的号,上下移动距离为hzdispwin
39 unsigned char xdata maxcurhz=0; //当前拼音的最大汉字数
40
41
42 extern unsigned char xdata hzstring[8]={0xa1,0xa3,0xb2,0xd1,0xb0,0xd8,0xb1,0xd8}; //保存汉字内码,大小应为
-hzdispwin*2+1//汉字显示个数MAX=10 个
43
44 extern unsigned char hz_dis[3][8]={0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,
45 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,
46 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1};
47 unsigned char page=0;
48
49 unsigned char hz_dis_geshu[3]={0x00,0x00,0x00};
50 unsigned xdata byte=0;
51
52
53
C51 COMPILER V8.02 PINYIN 04/10/2008 10:43:47 PAGE 2
54
55 void readonebyte()
56 {
57 1 unsigned char xdata j,DATA=0;
58 1 GT32_CS=0;
59 1 GT32_CLK=1;
60 1 for(j=0;j<8;j++)
61 1 {
62 2 GT32_CLK=0;
63 2 if(GT32_SO)
64 2 DATA=DATA|0x01;
65 2 else DATA=DATA|0x0;
66 2 GT32_CLK=1;
67 2 if(j!=7) DATA=DATA<<1;
68 2 }
69 1 byte=DATA;
70 1 GT32_CS=1;
71 1 }
72
73
74 unsigned char readbyte(unsigned long adrr)
75 {
76 1 sendcmd(0x03);
77 1 sendaddress(adrr);
-
-
78 1 readonebyte();
79 1 return(byte);
80 1
81 1 }
82
83
84 ///////////////////////////////////////////////
85 // 初始化,读入拼音码表 //
86 ///////////////////////////////////////////////
87 void pyInit()
88 {
89 1 short xdata i;
90 1 unsigned long xdata addr=0x0000;
91 1 PYCODETABLE py;
92 1 unsigned char xdata bytmp;
93 1 //unsigned short wdtmp;
94 1 addr=0x0000+baseaddr; //pysum 拼音组合数(2BYTE)
95 1 bytmp=readbyte(addr++);
96 1 pysum=bytmp;
97 1 pysum=pysum<<8;
98 1 bytmp=readbyte(addr);
99 1 pysum=pysum+bytmp;
100 1 addr=0x0002+baseaddr; //hzsum 读入汉字组合数(2BYTE)
101 1 bytmp=readbyte(addr++);
102 1 hzsum=bytmp;
103 1 hzsum=hzsum<<8;
104 1 bytmp=readbyte(addr);
105 1 hzsum=hzsum+bytmp;
106 1 addr=0x0004+baseaddr; //以26 个英文字母开头的拼音串索引(26*2=52BYTE)
107 1 for(i=0;i<26;i++)
108 1 {
109 2 bytmp=readbyte(addr++);
110 2 pyidx[i]=bytmp;
111 2 pyidx[i]=pyidx[i]<<8;
112 2 bytmp=readbyte(addr++);
113 2 pyidx[i]=pyidx[i]+bytmp;
C51 COMPILER V8.02 PINYIN 04/10/2008 10:43:47 PAGE 3
114 2 }
115 1 pyseek=pyidx[0]; //拼音查找的相对开始地址 ,移动指针用
116 1 addr=pyseek+baseaddr; //初始化时索引到第一字母“a”地址(初始值)
117 1 for(i=0;i<6;i++)
118 1 {
119 2 py.py[i]=readbyte(addr++);
120 2 }
121 1 bytmp=readbyte(addr++);
122 1 py.begin=bytmp;
123 1 py.begin=py.begin<<8;
124 1 bytmp=readbyte(addr++);
125 1 py.begin=py.begin+bytmp;
126 1 firsthz=py.begin;
127 1 }
128 ///////////////////////////////////////////
129 // 进行拼音串的处理 //
130 ///////////////////////////////////////////
131 void Input_py(char *tmppy) //tmppy 拼音串为小写a-z 的组合. 若全局变量maxcurhz 为0 说明拼音串非法,无相应汉
132 {
133 1 short i,j;
134 1 PYCODETABLE py;
135 1 unsigned long addr=0;
136 1 unsigned char pylong=0;
137 1 unsigned char bytmp=0;
138 1 unsigned char k=0,t=0;
139 1 curhz=0;
140 1 maxcurhz=0;
141 1 //拼音串已录入到tmppy 中,且长度不大于6,大于6 的将无法找到拼音
142 1 if(tmppy[0]=='\0') //空返回
143 1 {
144 2 maxcurhz=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -