📄 ht1621.lst
字号:
C51 COMPILER V7.01 HT1621 02/12/2003 14:57:27 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN HT1621.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE HT1621.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //HT1621操作软件包
2 //文件名:HT1621.c
3 //包含对HT1621操作的底层函数,如发送数据位,发送字节等等,
4
5 #include <reg51.h>
6 #include <intrins.h>
7 #include <HT1621.h>
8
9 /*设置HT1621控制端口*/
10 sbit CS_PORT = P0^1; /*CS端口*/
11 sbit CLK_PORT = P0^2; /*WR端口*/
12 sbit SDA_PORT = P0^3; /*DATA端口*/
13
14 #define uchar unsigned char /*宏定义*/
15 #define uint unsigned int
16 #define _Nop() _nop_() /*定义空指令*/
17
18
19
20 //起动函数
21 //起动HT1621,以便进行器件操作.
22 void Start_spi()
23 { CS_PORT=1;
24 1 CLK_PORT=1;
25 1 SDA_PORT=1;
26 1 _Nop(); /*起始条件建立时间大于3.34us*/
27 1 _Nop();
28 1 _Nop();
29 1 _Nop();
30 1 CS_PORT=0;
31 1 CS_PORT=0;
32 1 CLK_PORT=0;
33 1 CLK_PORT=0;
34 1 }
35
36
37 //发送数据位函数
38 //向HT1621发送dat的bitcnt位数据,由高位开始.(bitcnt不能大于8)
39 void SendBit(uchar dat,uchar bitcnt)
40 { uchar i;
41 1 for(i=0;i<bitcnt;i++)
42 1 { if(( dat & 0X80 ) == 0) SDA_PORT = 0;
43 2 else SDA_PORT = 1; /*发送数据由高位到低位传送*/
44 2 _Nop(); /*起始条件建立时间大于4.7us,延时*/
45 2 _Nop();
46 2 _Nop();
47 2 _Nop();
48 2 CLK_PORT = 1; /*置时钟线为高,通知被控器开始接收数位*/
49 2 _Nop(); /*起始条件建立时间大于4.7us,延时*/
50 2 _Nop();
51 2 _Nop();
52 2 _Nop();
53 2 _Nop();
54 2 CLK_PORT = 0; /*钳住总线准备下一个数据位*/
55 2 dat=dat<<1; /*发送数据左移一位*/
C51 COMPILER V7.01 HT1621 02/12/2003 14:57:27 PAGE 2
56 2 }
57 1 }
58
59
60 // 发送字节函数
61 // 向HT1621发送一字节数据,数据单元首地址在指针buf中,发送字节数由bytecnt指定
62 void SendByte(uchar dat)
63 { SendBit(dat,8); /*发送字节*/
64 1 }
65
66
67 // 发送命令函数(A类)
68 // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
69 void SENDCOMA(uchar com)
70 { Start_spi();
71 1 SendBit(0X80,4); /*发送设置命令ID=100 0*/
72 1 SendByte(com); /*发送命令字*/
73 1 }
74
75
76 // 发送命令函数(B类)
77 // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
78 void SENDCOMB(uchar adr)
79 { Start_spi();
80 1 SendBit(0XA0,4); /*发送写显示RAM命令ID=101 0*/
81 1 SendBit(adr,5); /*指定写入地址*/
82 1 }
83
84 // 发送命令函数(C类)
85 // 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
86 void SENDCOMC(uchar com)
87 { Start_spi();
88 1 SendBit(0X90,4); /*发送命令ID=100 1*/
89 1 SendByte(com); /*发送命令*/
90 1 }
91
92
93 //初始化HT1621函数
94 void INTI1621()
95 { SENDCOMA(BIAS);
96 1 SENDCOMA(XTAL32);
97 1 SENDCOMA(SYSEN);
98 1 SENDCOMA(LCDON);
99 1 SENDCOMA(TONE4K);
100 1 }
101
102
103
104 //向指定一个显示缓冲区填充一个数据
105 void disp(uchar dat,uchar addr)
106 { addr=addr<<3; /*左移3位,低5位作为RAM地址*/
107 1 SENDCOMB(addr);
108 1 SendByte(dat);
109 1 }
110
111 //循环填充并显示某一段连地址地
112 //addr填充段首地址,显示位数num,填充数据dat.
113 void dispsome(uchar num,uchar dat,uchar addr)
114 { uchar i;
115 1 for(i=0;i<num;i++)
116 1 { disp(dat,addr);
117 2 addr++;
C51 COMPILER V7.01 HT1621 02/12/2003 14:57:27 PAGE 3
118 2 addr++;
119 2 }
120 1 }
121
122
123 //左移一位循环显示.
124 //显示位数num,指针p指向一组要显示的数组,显示首地址addr
125 void disRound(uchar num, uchar *p, uchar addr)
126 { uchar i;
127 1 for(i=0;i<num;i++)
128 1 { disp(*p,addr);
129 2 p++;
130 2 addr++;
131 2 addr++;
132 2 }
133 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 239 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -