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 }
时间: 2024-12-13 13:37:15