码迷,mamicode.com
首页 > 其他好文 > 详细

重拾单片机 第二天 数码管的使用 ( 按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值 )

时间:2015-10-28 19:20:29      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

 

技术分享

 

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!