?? ch452.lst
字號:
C51 COMPILER V8.02 CH452 08/13/2007 20:43:11 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CH452
OBJECT MODULE PLACED IN ch452.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE ch452.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 標題: 藍海微芯LJD-SY-5200單片機開發(fā)系統(tǒng)演示程序 *
3 * 文件: CH451_INT1.C *
4 * 日期: 2006-8-11 *
5 * 版本: 1.0 *
6 * 作者: 藍海微芯 *
7 * 網(wǎng)站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * 在數(shù)碼管上顯示按鍵值 *
11 * *
12 * *
13 ********************************************************************************
14 * 【版權(quán)】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
15 * 【聲明】 此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
16 *******************************************************************************/
17 #include<reg52.h>
18 #include<absacc.h>
19 #include<intrins.h>
20
21 #define uchar unsigned char
22 #define uint unsigned int
23
24 #define CH451_DIG0 0x0800 /*數(shù)碼管位0顯示*/
25 #define CH451_DIG1 0x0900 /*數(shù)碼管位1顯示*/
26 #define CH451_DIG2 0x0a00 /*數(shù)碼管位2顯示*/
27 #define CH451_DIG3 0x0b00 /*數(shù)碼管位3顯示*/
28 #define CH451_DIG4 0x0c00 /*數(shù)碼管位4顯示*/
29 #define CH451_DIG5 0x0d00 /*數(shù)碼管位5顯示*/
30 #define CH451_DIG6 0x0e00 /*數(shù)碼管位6顯示*/
31 #define CH451_DIG7 0x0f00 /*數(shù)碼管位7顯示*/
32
33 sbit ch451_din = P1^6;
34 sbit ch451_clk = P1^5;
35 sbit ch451_load = P1^7;
36 sbit ch451_dout = P3^2;
37
38 volatile uchar ch451_key;
39 volatile uchar M;
40 volatile uchar N;
41 volatile bit flag;
42 /********************************************************************
43 函 數(shù) 名:ch451_init()
44 功 能:對ch451芯片進行初始化
45 說 明:
46 調(diào) 用:
47 入口參數(shù):
48 返 回 值:
49 設(shè) 計:藍海微芯
50 ***********************************************************************/
51 void ch451_init(void)
52 {
53 1 ch451_din = 0; /*先低后高,選擇4線輸入*/
54 1 ch451_din = 1;
55 1
C51 COMPILER V8.02 CH452 08/13/2007 20:43:11 PAGE 2
56 1
57 1 ch451_load = 1;
58 1 ch451_clk = 1;
59 1 _nop_();
60 1
61 1 }
62 /********************************************************************
63 函 數(shù) 名:ch451_write()
64 功 能:把12位的指令或數(shù)據(jù)寫入ch451
65 說 明:12位數(shù)據(jù)或指令的寫入順序是低位
66 調(diào) 用:
67 入口參數(shù):command
68 返 回 值:
69 設(shè) 計:藍海微芯
70 ***********************************************************************/
71 void ch451_write(unsigned int command)
72 {
73 1 unsigned char i;
74 1 #ifdef USE_KEY
EX0=0; /*禁止鍵盤中斷*/
#endif
77 1 ch451_load=0; /*命令開始*/
78 1 for(i=0;i<12;i++)
79 1 { /*送入12位數(shù)據(jù),低位在前*/
80 2 ch451_din=command&1;
81 2 ch451_clk=0;
82 2 command>>=1;
83 2 ch451_clk=1; /*上升沿有效*/
84 2 }
85 1 ch451_load=1; /*加載數(shù)據(jù)*/
86 1 #ifdef USE_KEY
EX0=1;
#endif
89 1 }
90 /********************************************************************
91 函 數(shù) 名:ch451_bcd()
92 功 能:對按鍵值進行分離
93 說 明:把一字節(jié)按鍵值分拆分成兩字節(jié)
94 調(diào) 用:
95 入口參數(shù):ds_bcd
96 返 回 值:
97 設(shè) 計:藍海微芯
98 ***********************************************************************/
99 void ch451_bcd(uchar ds_bcd)
100 {
101 1 switch(ds_bcd)
102 1 {
103 2 case 0x44: M=0x00; break; /*按鍵0被按下*/
104 2 case 0x45: M=0x01; break; /*按鍵1被按下*/
105 2 case 0x46: M=0x02; break; /*按鍵2被按下*/
106 2 case 0x47: M=0x03; break; /*按鍵3被按下*/
107 2 case 0x4C: M=0x04; break; /*按鍵4被按下*/
108 2 case 0x4D: M=0x05; break; /*按鍵5被按下*/
109 2 case 0x4E: M=0x06; break; /*按鍵6被按下*/
110 2 case 0x4F: M=0x07; break; /*按鍵7被按下*/
111 2 case 0x54: M=0x08; break; /*按鍵8被按下*/
112 2 case 0x55: M=0x09; break; /*按鍵9被按下*/
113 2 default:return;
114 2 }
115 1
116 1
117 1
C51 COMPILER V8.02 CH452 08/13/2007 20:43:11 PAGE 3
118 1 // M = ds_bcd&0xf0;
119 1 //M>>=4;
120 1 // N = ds_bcd&0x0f;
121 1 }
122 /********************************************************************
123 函 數(shù) 名:ch451中斷服務(wù)程序
124 功 能:獲取鍵值
125 說 明:
126 調(diào) 用:
127 入口參數(shù):
128 返 回 值:ch451_key
129 設(shè) 計:藍海微芯
130 ***********************************************************************/
131
132 void ch451_inter() interrupt 1 using 1
133 {
134 1 unsigned char i; /*定義循環(huán)變量*/
135 1 unsigned char command,keycode; /*定義控制字寄存器,和中間變量定時器*/
136 1 command=0x07; /*讀取鍵值命令的高4位0111B*/
137 1 EX0= 0;
138 1 ch451_load=0; /*命令開始*/
139 1 for(i=0;i<4;i++)
140 1 {
141 2 ch451_din=command&1; /*低位在前,高位在后*/
142 2 ch451_clk=0;
143 2 command>>=1; /*右移一位*/
144 2 ch451_clk=1; /*產(chǎn)生時鐘上升沿鎖通知CH451輸入位數(shù)據(jù)*/
145 2 }
146 1 ch451_load=1; /*產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)*/
147 1 keycode=0; /*清除keycode*/
148 1 for(i=0;i<7;i++)
149 1 {
150 2 keycode<<=1; /*數(shù)據(jù)作移一位,高位在前,低位在后*/
151 2 keycode|=ch451_dout; /*從高到低讀入451的數(shù)據(jù)*/
152 2 ch451_clk=0; /*產(chǎn)生時鐘下升沿通知CH451輸出下一位*/
153 2 ch451_clk=1;
154 2 }
155 1 ch451_key=keycode; /*保存上次的鍵值*/
156 1 flag=1;
157 1 EX0 = 1;
158 1 IE0=0; /*清中斷標志*/
159 1 }
160 main()
161 {
162 1 EA=1;
163 1 EX0=1;
164 1 flag=0;
165 1 ch451_init();
166 1 ch451_write(0x403);
167 1 ch451_write(0x580);
168 1 ch451_write(CH451_DIG7|M);
169 1 //ch451_write(CH451_DIG6|N);
170 1 while(1)
171 1 {
172 2 if(flag)
173 2 {
174 3 flag=0;
175 3 ch451_bcd(ch451_key);
176 3 ch451_write(CH451_DIG7|M);
177 3 //ch451_write(CH451_DIG6|N);
178 3 }
179 2 }
C51 COMPILER V8.02 CH452 08/13/2007 20:43:11 PAGE 4
180 1 }
181
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 232 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -