📄 xians164.lst
字号:
C51 COMPILER V7.50 XIANS164 08/08/2006 22:26:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE XIANS164
OBJECT MODULE PLACED IN xians164.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe xians164.c DB OE
line level source
1 /*********************************************
2 1.功能: 本程序针对74x164的LED显示驱动程序
3 2.I/O脚使用
4 io_74x164clk; // 串行通信时钟,上升沿有效
5 io_74x164data; // 串行数据,单向通信
6
7 3.调试环境:12M晶振(51系列12时钟模式)
8 若为其他时钟则作如下修改:
9 (1)
10 (2)
11
12 3.程序大小(ROM估计):
13
14 4.数据大小(RAM估计):
15
16 5.运行时间(与调用函数有关):
17
18
19 ***********************************************/
20
21 //#define __XIANS164_DEBUG__
22 #ifdef __XIANS164_DEBUG__
#include<wywcomm.h>
#include<reg51.h>
sbit io_74x164clk =P0^7; // 串行通信时钟,上升沿有效
sbit io_74x164data=P0^6; // 串行数据,单向通信
//此模块调用其它模块的外部变量和函数的声明(此程序无)
#else
35
36 #include "e:\diansai2006\c8051f020\src\system.h" //所有的项目用相同的系统头文件,但存放的路径不同,各
-自存放在对应的项目文件夹。
37
38
39 #endif
40
41
42 //此模块的宏定义(常数等)
43
44
45
46 //此模块必要的库函数包含(include)
47
48 #include<intrins.h>
49
50 #include<math.h>
51
52 //全局变量(静态或一般)的定义
53
54
C51 COMPILER V7.50 XIANS164 08/08/2006 22:26:33 PAGE 2
55
56 //以下为函数定义
57
58
59
60 //***********写164************************
61 static void write(uint8 shu)
62 {
63 1 int8 d,shuju;
64 1 shuju=shu;
65 1
66 1 for(d=8;d>0;d--)
67 1 {
68 2
69 2 io_74x164clk=0;
70 2
71 2 shuju <<= 1 ;
72 2
73 2 io_74x164data = CY;
74 2
75 2 io_74x164clk=1;
76 2
77 2 }
78 1 }
79 //****************清屏***************//
80
81
82 void v_74x164Ini_f(void)
83 {
84 1 uint8 i;
85 1 for(i=64;i>0;i--)
86 1 {
87 2
88 2 io_74x164clk=0;
89 2
90 2 io_74x164data=1;
91 2
92 2 io_74x164clk=1;
93 2
94 2 }
95 1 }
96
97 void v_74x164WriteNumber_f(uint8 data *a,uint8 d,int16 shuju)
98 //**************************************************************************************
99 //功能: 显示六位以下的带小数点的数字
100 //说明: 输入*a 表示:第8、7位相应显示内容a[1]、a[0](未译码),取值范围:两个字节。
101 // 输入 d 表示:小数点相对数字的显示位置 , 取值范围:0~4。(超出范围不显示)
102 // 输入shuju 表示:显示任意有符号16位整数, 取值范围:-32768~32767。
103 //***************************************************************************************
104 {
105 1 bit b0=1,b1=0,zf=1;
106 1 int8 xx;
107 1 uint8 i;
108 1 uint8 code yima[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/*0,1,2,3,4,5,6,7,8,9,-,*/
109 1
110 1 write(a[1]); //第8位显示内容
111 1
112 1 write(a[0]); // 第7位显示内容
113 1
114 1 if(shuju >= 0) {zf=0;write(0xff);} //第6位显示内容,判断1
115 1
116 1 shuju=abs(shuju);//取绝对值
C51 COMPILER V7.50 XIANS164 08/08/2006 22:26:33 PAGE 3
117 1
118 1 for(xx=4;xx >= 0;xx--) //写入5次数字
119 1 {
120 2 switch(xx)
121 2 {
122 3 case 4: i=shuju/10000;break;
123 3 case 3: i=shuju%10000/1000;break;
124 3 case 2: i=shuju%1000/100;break;
125 3 case 1: i=shuju%100/10;break;
126 3 case 0: i=shuju%10;
127 3 }
128 2
129 2 if(i||(d==xx)||b1||(xx==0))
130 2 {
131 3 if(b0&&zf) {write(0xBF);b0=0;}
132 3 if(d==xx) write(yima[i]&0x7f);
133 3 else write(yima[i]);
134 3 b1=1;
135 3 }
136 2 else write(0xff);
137 2 }
138 1 }
139
140
141
142
143
144 void v_74x164WriteNDig_f(uint8 data *a,uint8 n)
145 //**************************************************************************************
146 //功能: 显示1位以上的未译码的数
147 //说明: 输入*a 表示:相应数组位显示内容,显示a[n-1]..a[0](未译码)。
148 // 输入 n 表示:需要显示的位数 取值范围:0以上
149 //***************************************************************************************
150 {
151 1 uint8 i;
152 1 for(i=n;i>0;i--)
153 1 write(a[n-1]);
154 1
155 1 }
156
157
158
159
160
161
162
163
164
165 #ifdef __XIANS164_DEBUG__
void main()
{
uint8 data pp[]={0x8c,0xc6};//显示“PC”
v_74x164Ini_f();
v_74x164WriteNumber_f(pp,5,-12006);
v_BC7281AWriteOneDig_f(pp,2);
C51 COMPILER V7.50 XIANS164 08/08/2006 22:26:33 PAGE 4
while(1) ;
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 294 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -