标签:
1、
1 /*--------------www.szjcdz.cn--------------------
2 名称:2按键加减操作
3 编写:szjcdz
4 日期:2010.9
5 内容:按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值
6 ------------------------------------------------*/
7 #include<reg52.h>
8 #define uchar8 unsigned char
9 #define uint16 unsigned int
10 sbit KEY_ADD=P3^3;
11 sbit KEY_DEC=P3^4;
12 sbit LATCH1=P2^6;
13 sbit LATCH2=P2^7;
14 void display( );
15
16 uchar8 code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 显示段码值0~F
17 uchar8 code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//分别对应相应的数码管点亮,即位码
18
19 uchar8 Template; // 存储显示值的全局变量
20
21 // 延时函数
22 void DelayMS(uint16 val)
23 {
24 uint16 i,j;
25 for(i=0;i<val;i++)
26 for(j=0;j<113;j++);
27
28 }
29
30
31 //*******************************主函数*******************************//
32 void main(void)
33 {
34 uchar8 num;
35
36 KEY_ADD=1;
37 KEY_DEC=1;
38
39 while(1)
40 {
41 if(!KEY_ADD)
42 {
43 DelayMS(10);
44 if(!KEY_ADD)
45 {
46 while(!KEY_ADD); // 如果按下,KEY_ADD=0 ,那么为真,则 一直等待
47
48 {
49 if(num<15)
50 num++;
51
52 }
53 }
54
55 }
56
57 if(!KEY_DEC)
58 {
59 DelayMS(10);
60 if(!KEY_DEC)
61 {
62 while(!KEY_DEC); // 如果按下没有释放,KEY_ADD=0 ,那么为真,则 一直等待
63
64 {
65 if(num>0)
66 num--;
67
68 }
69 }
70
71 }
72
73 // 以上实现了一个数字 num 等于 几 的功能
74
75
76 Template=DuanMa[num]; // 全局变量 段码 ,用来确定要显示的数字是什么
77
78 display( ); // 显示
79
80 }
81
82
83 }
84
85 /***************************************************************/
87 void display( void )
88 {
89 P0=0;
90 LATCH1=1;
91 LATCH1=0;
92
93 P0=WeiMa[2]; // 也就是 选 第三个 数码管
94 LATCH2=1; // LATCH2 WEI P2^7
95 LATCH2=0;
96
97 P0=Template; // 因为 段码是全局变量,所以 P0=Template=DuanMa[num];
98 LATCH1=1; // LATCH1 DUAN P2^6
99 LATCH1=0;
100
101 DelayMS(2);
102
104 }
实验现象:
我们这里 位选 第3个 也就是 WeiMa[2], 按独立按键 INT1 是 +1 , 按独立按键 T0 是 -1,可以 从 0到 F
动态扫描数码管:
uchar8 code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 显示段码值0~F
1 void display( void )
2 {
3 int i;
4
5 P0=0;
6 LATCH1=1;
7 LATCH1=0;
8
9 P0=WeiMa[2];
10 LATCH2=1;
11 LATCH2=0;
12
13 for(i=0;i<16;i++)
14 {
15
16 P0=DuanMa[i]; // // 动态扫描,还是很简单的,这样就实现了控制
17 LATCH1=1;
18 LATCH1=0;
19
20 DelayMS(200);
21
22 }
23 }
重拾单片机 第二天 数码管的使用 ( 按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值 )
标签:
原文地址:http://www.cnblogs.com/shengruxiahua/p/4915282.html