📄 irqkeyread.lst
字号:
C51 COMPILER V8.02 IRQKEYREAD 07/13/2007 11:49:08 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE IRQKEYREAD
OBJECT MODULE PLACED IN IRQKeyRead.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IRQKeyRead.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #include"ch451.h"
4
5 LEDDisplay(char MODE,uint data1)
6 {
7 1 uint i;
8 1 void WriteCh451(uint da);
9 1 void Delay();
10 1 WriteCh451(CH451_SYSON2);
11 1 WriteCh451(CH451_BCD);
12 1 if(MODE==0) //突发显示
13 1 {
14 2 if(1) //如果条件成立时显示
15 2 WriteCh451(data1);
16 2 }
17 1 if(MODE==1) //定周期显示
18 1 {
19 2 for(i=0;i<10000;i++); //定时周期
20 2 WriteCh451(data1);
21 2 }
22 1 }
23
24 void WriteCh451(uint da)
25 {
26 1 uint i;
27 1 EX1=0; //关闭键盘中断
28 1 CH451_LOAD=0; //复位LOAD信号
29 1 for(i=0;i<12;i++)
30 1 {
31 2 if((da&0x1)==1)
32 2 CH451_DIN=1;
33 2 else
34 2 CH451_DIN=0;
35 2 CH451_DCLK=0;
36 2 da>>=1;
37 2 CH451_DCLK=1; //上升沿读取数据
38 2 }
39 1 CH451_LOAD=1; //加载数据
40 1 Delay();
41 1 EX1=1; //打开键盘中断
42 1 }
43
44
45 void Delay()
46 {
47 1 _nop_();
48 1 _nop_();
49 1 }
50
51 uint ReadCh451()
52 {
53 1 uchar i;
54 1 uchar cmd ,keycode;
55 1 EX1=0; //禁止键盘中断
C51 COMPILER V8.02 IRQKEYREAD 07/13/2007 11:49:08 PAGE 2
56 1 cmd=0x07; //获取按键值
57 1 CH451_LOAD=0;
58 1 for(i=0;i<4;i++)
59 1 {
60 2 if((cmd&0x1)==1)
61 2 CH451_DIN=1;
62 2 else
63 2 CH451_DIN=0;
64 2 CH451_DCLK=0;
65 2 cmd>>=1;
66 2 CH451_DCLK=1;
67 2 }
68 1 CH451_LOAD=1;
69 1 keycode=0;
70 1 for(i=0;i<7;i++)
71 1 {
72 2 keycode<<=1; //数据移入keycode
73 2 keycode|=CH451_DOUT;//从高到低读入451的数据
74 2 CH451_DCLK=0; //时钟下降沿通知ch451输出下一位
75 2 Delay();
76 2 CH451_DCLK=1;
77 2 }
78 1
79 1 IE=0; //清除中断标志
80 1 EX1=1;
81 1 return(keycode);
82 1 }
83
84 void IRQKeyRead() interrupt 2
85 {
86 1 uchar key;
87 1 uchar key0,key1;
88 1 key=ReadCh451();
89 1 key=key&0x3f;
90 1 key0=key/10;
91 1 key1=key%10;
92 1 if(key0!=0)
93 1 LEDDisplay(0,CH451_DIG1|key0);
94 1 else
95 1 LEDDisplay(0,CH451_DIG1|0x10);
96 1 LEDDisplay(0,CH451_DIG0|key1);
97 1 }
98
99
100 void InitSys()
101 {
102 1 EA=1;
103 1 //LEDDisplay(0,CH451_DSP);
104 1 WriteCh451(CH451_SYSON2);
105 1 WriteCh451(CH451_BCD);
106 1 EX1=1;
107 1 }
108
109 void main()
110 {
111 1 LEDDisplay(0,0x0800);
112 1 LEDDisplay(0,0x0900);
113 1 LEDDisplay(0,0x0a00);
114 1 LEDDisplay(0,0x0b00);
115 1 LEDDisplay(0,0x0c00);
116 1 LEDDisplay(0,0x0d00);
117 1 LEDDisplay(0,0x0e00);
C51 COMPILER V8.02 IRQKEYREAD 07/13/2007 11:49:08 PAGE 3
118 1 LEDDisplay(1,0x0f00);
119 1 for(;;)
120 1 {
121 2 InitSys();
122 2 while(0);
123 2 }
124 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 369 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -