?? 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 + -