📄 bc728x.lst
字号:
C51 COMPILER V6.12 BC728X 11/29/2007 10:34:25 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE BC728X
OBJECT MODULE PLACED IN F:\YUN\安全牌\安全牌C\BC728X.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\YUN\安全牌\安全牌C\BC728X.C DB SB OE
stmt level source
1
2 #include "fun.h"
3 #include "var.h"
4
5 //初始化BC728x
6 void init_bc728x(void)
7 {uchar i;
8 1 RST=0;
9 1 delay(0xff);
10 1 RST=1;
11 1 delay(0xff);
12 1 for(i=0xf7;i>=0xe0;i--)
13 1 {P2=i;
14 2 while(rd_bc728x(A_ModReg)!=D_ModReg)wr_bc728x(A_ModReg,D_ModReg); //工作模式设置
15 2 wr_bc728x(A_Seg1Reg,D_SegBright); //全亮
16 2 wr_bc728x(A_Seg2Reg,D_SegBright);
17 2 };
18 1 for(i=5;i>0;i--)
19 1 {kmg();
20 2 delay(0xffff);
21 2 };
22 1 for(i=0xf7;i>=0xe0;i--)
23 1 {P2=i;
24 2 wr_bc728x(A_Seg1Reg,D_SegDark); //全灭
25 2 wr_bc728x(A_Seg2Reg,D_SegDark);
26 2 };
27 1 for(i=5;i>0;i--)
28 1 {kmg();
29 2 delay(0xffff);
30 2 }
31 1 }
32
33
34 //写入BC728X,第一个参数为目标寄存器地址,第二个参数为要写入的数据
35 void wr_bc728x(uchar reg_add,uchar reg_data)
36 {send_byte(reg_add); //发送寄存器地址
37 1 send_byte(reg_data); //发送数据字节
38 1 }
39
40 //读出BC728X内部寄存器的值,调用参数为寄存器地址
41 uchar rd_bc728x(uchar reg_add)
42 {send_byte(reg_add|0x80); //发送读指令(bit7=1)
43 1 return(receive_byte()); //接收数据字节并返回
44 1 }
45
46
47 //向BC728X发送一个字节
48 void send_byte(uchar out_byte)
49 {uchar n;
50 1 CLK=0; //产生一个CLK脉冲
51 1 CLK=1;
52 1 do{CLK=0; //发送CLK脉冲直至DAT为低电平
53 2 CLK=0;
54 2 CLK=1;
55 2 }while(DAT);
C51 COMPILER V6.12 BC728X 11/29/2007 10:34:25 PAGE 2
56 1 CLK=0; //15US之内再次输出一个CLK脉冲
57 1 CLK=0;
58 1 CLK=1;
59 1 while(!DAT); //等待BC728X进入接收状态
60 1 for(n=0;n<8;n++)
61 1 { //发送8个比特
62 2 if((out_byte&0x80)==0)
63 2 {DAT=0; //如果待发BIT为0,置DAT为0
64 3 }
65 2 else
66 2 {DAT=1; //反之置为1
67 3 }
68 2 out_byte=out_byte*2; //send_data 左移一位
69 2 CLK=0; //输出一个CLK脉冲
70 2 CLK=0;
71 2 CLK=1;
72 2 delay(1); //短暂延时
73 2 }
74 1 DAT=1; //恢复DAT为高电平
75 1 delay(2); //指令间设置一个微小延时
76 1 }
77
78 //从BC728X接收一个字节
79
80 uchar receive_byte(void)
81 {uchar n,in_byte;
82 1 CLK=0; //只发送一个单一的CLK脉冲
83 1 CLK=1;
84 1 while(DAT); //等待BC728X响应DAT为低电平
85 1 CLK=0; //收到响应,再发一个脉冲等待接收数据
86 1 CLK=1;
87 1 for(n=0;n<8;n++)
88 1 { //接收8个BIT
89 2 delay(1); //短暂延时
90 2 in_byte=in_byte*2; //in_byte 左移一位
91 2 if(DAT) //如果DAT为1
92 2 {in_byte=in_byte|0x01; //bit0=1
93 3 }
94 2 CLK=0; //输出一个CLK脉冲
95 2 CLK=1;
96 2 }
97 1 delay(2); //指令间设置一个微小延时
98 1 return(in_byte);
99 1 }
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
C51 COMPILER V6.12 BC728X 11/29/2007 10:34:25 PAGE 3
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
C51 COMPILER V6.12 BC728X 11/29/2007 10:34:25 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
receive_byte . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
n. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -