📄 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单片机开发系统演示程序 *
3 * 文件: CH451_INT1.C *
4 * 日期: 2006-8-11 *
5 * 版本: 1.0 *
6 * 作者: 蓝海微芯 *
7 * 网站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * 在数码管上显示按键值 *
11 * *
12 * *
13 ********************************************************************************
14 * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
15 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
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 /*数码管位0显示*/
25 #define CH451_DIG1 0x0900 /*数码管位1显示*/
26 #define CH451_DIG2 0x0a00 /*数码管位2显示*/
27 #define CH451_DIG3 0x0b00 /*数码管位3显示*/
28 #define CH451_DIG4 0x0c00 /*数码管位4显示*/
29 #define CH451_DIG5 0x0d00 /*数码管位5显示*/
30 #define CH451_DIG6 0x0e00 /*数码管位6显示*/
31 #define CH451_DIG7 0x0f00 /*数码管位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 函 数 名:ch451_init()
44 功 能:对ch451芯片进行初始化
45 说 明:
46 调 用:
47 入口参数:
48 返 回 值:
49 设 计:蓝海微芯
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 函 数 名:ch451_write()
64 功 能:把12位的指令或数据写入ch451
65 说 明:12位数据或指令的写入顺序是低位
66 调 用:
67 入口参数:command
68 返 回 值:
69 设 计:蓝海微芯
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位数据,低位在前*/
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; /*加载数据*/
86 1 #ifdef USE_KEY
EX0=1;
#endif
89 1 }
90 /********************************************************************
91 函 数 名:ch451_bcd()
92 功 能:对按键值进行分离
93 说 明:把一字节按键值分拆分成两字节
94 调 用:
95 入口参数:ds_bcd
96 返 回 值:
97 设 计:蓝海微芯
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 函 数 名:ch451中断服务程序
124 功 能:获取键值
125 说 明:
126 调 用:
127 入口参数:
128 返 回 值:ch451_key
129 设 计:蓝海微芯
130 ***********************************************************************/
131
132 void ch451_inter() interrupt 1 using 1
133 {
134 1 unsigned char i; /*定义循环变量*/
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; /*产生时钟上升沿锁通知CH451输入位数据*/
145 2 }
146 1 ch451_load=1; /*产生加载上升沿通知CH451处理命令数据*/
147 1 keycode=0; /*清除keycode*/
148 1 for(i=0;i<7;i++)
149 1 {
150 2 keycode<<=1; /*数据作移一位,高位在前,低位在后*/
151 2 keycode|=ch451_dout; /*从高到低读入451的数据*/
152 2 ch451_clk=0; /*产生时钟下升沿通知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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -