📄 task_165_595.lst
字号:
C51 COMPILER V7.06 TASK_165_595 09/18/2008 13:53:18 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TASK_165_595
OBJECT MODULE PLACED IN TASK_165_595.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE TASK_165_595.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "c8051f020.h"
2 #include "config.h"
3 #include "stdio.h"
4 #include "intrins.h"
5
6 bit flag_165; //按键存在标志,为1表示有键按下,否则没有键按下
7
8 sbit A0=ACC^0;
9 sbit A1=ACC^1;
10 sbit A2=ACC^2;
11 sbit A3=ACC^3;
12 sbit A4=ACC^4;
13 sbit A5=ACC^5;
14 sbit A6=ACC^6;
15 sbit A7=ACC^7;
16
17 sbit SCLK = P3^5; //移位寄存器时钟输入:11脚
18 sbit RCLK = P3^4; //存储寄存器时钟输入:12脚
19 sbit SER = P3^3; //串行数据输入:14脚
20
21 sbit SH_LD = P3^2; //移位控制/置入控制(低电平有效):1脚
22 sbit CLK = P3^1; //时钟输入端(上升沿有效):2脚
23 sbit QH = P3^0; //输出端 :9脚
24
25 /**************************************************
26 >>>函数名称: IN_165(void)
27 >>>函数功能: 串行输出给ACC
28 >>>入口参数: 无
29 >>>出口参数: return(ACC);8个键盘码
30 >>>调用模块: 无
31 >>>建立时间: 08_07_25
32 /**注意事项:是先将QH值赋值给An,因为在SH_LD上升沿到来时候Qh已经输出,在CLK上升沿来的时候输出Qg值
33 ***************************************************/
34 UCHAR IN_165(void)
35 {
36 1 //按HGFEDCBA顺序串行输出
37 1 A7=QH;CLK = 0;CLK = 1;
38 1 A6=QH;CLK = 0;CLK = 1;
39 1 A5=QH;CLK = 0;CLK = 1;
40 1 A4=QH;CLK = 0;CLK = 1;
41 1 A3=QH;CLK = 0;CLK = 1;
42 1 A2=QH;CLK = 0;CLK = 1;
43 1 A1=QH;CLK = 0;CLK = 1;
44 1 A0=QH;
45 1 return(ACC);
46 1 }
47
48 /**************************************************
49 >>>函数名称: TASK_165(void)
50 >>>函数功能: 采集键盘码
51 >>>入口参数: 无
52 >>>出口参数: 有键按下:return(DATA_165); 无键按下:return(0);
53 >>>调用模块: UCHAR IN_165(void);
54 >>>建立时间: 08_07_25
55 /**注意事项:
C51 COMPILER V7.06 TASK_165_595 09/18/2008 13:53:18 PAGE 2
56 ***************************************************/
57 UCHAR TASK_165(void)
58 {
59 1 UCHAR DATA_165;
60 1 DATA_165=0;
61 1 CLK = 0;
62 1 ACC=0;
63 1 SH_LD = 0; //74LS165将并行数据置入寄存器中
64 1 SH_LD = 1; //并行置数功能被禁止
65 1 DATA_165=IN_165();
66 1 if(DATA_165)
67 1 {
68 2 flag_165=1;
69 2 return(DATA_165);
70 2 }
71 1 else
72 1 {
73 2 flag_165=0;
74 2 return(0);
75 2 }
76 1 }
77
78
79 /**************************************************
80 >>>函数名称: LED_595_TASK(UCHAR d)
81 >>>函数功能: 74HC595驱动发光二极管LED
82 >>>入口参数: UCHAR d:对应的8个数码管的亮灭,位为1亮,位为0灭
83 >>>出口参数: 无
84 >>>调用模块: 无
85 /**建立时间:2008年7月20号
86 /**注意事项:串行到并行的数据转换
87 ***************************************************/
88 void Write_595(UCHAR d)
89 {
90 1 UCHAR i,Serial;
91 1 Serial = d;
92 1 for(i=0;i<8;i++)
93 1 {
94 2 SCLK = 0;
95 2 SER=Serial&0X80;//因为串口输入是最低位先输入,所以,先右移一位使得最低位变为CY,再执行SER=CY;
96 2 Serial=Serial<<1;
97 2 SCLK = 1; //数据在SCLK的上升沿输入到移位寄存器中
98 2 _nop_();
99 2 }
100 1 //以下3条指令若在多字节时,应该移入多字节全发送完后在执行此3条指令
101 1 RCLK = 0;
102 1 _nop_();
103 1 RCLK = 1; //数据在RCLK的上升沿输输出
104 1 }
105
106
107 void main(void)
108 {
109 1 UCHAR KEY_165;
110 1 UCHAR tab[8]={0x01,0x02,0x04,0x8,0x10,0x20,0x40,0x80};
111 1 config();
112 1 for(;;)
113 1 {
114 2 KEY_165=TASK_165();
115 2 switch(KEY_165)
116 2 {
117 3 case 0x01: Write_595(0x01);break;
C51 COMPILER V7.06 TASK_165_595 09/18/2008 13:53:18 PAGE 3
118 3 case 0x02: Write_595(0x02);break;
119 3 case 0x04: Write_595(0x04);break;
120 3 case 0x08: Write_595(0x08);break;
121 3 case 0X10: Write_595(0x10);break;
122 3 case 0X20: Write_595(0x20);break;
123 3 case 0X40: Write_595(0x40);break;
124 3 case 0X80: Write_595(0x80);break;
125 3 default: break;
126 3 }
127 2 }
128 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 290 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -