查看: 1111|回复: 0
打印 上一主题 下一主题

007、数码管计数显示设计

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-29 20:32:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/********************************************************************
                            汇诚科技
网址:http://www.ourhc.cn
产品有售淘宝店:http://shop36330473.taobao.com   
*********************************************************************/
#include <iom16v.h>
/********************************************************************
                数据类型定义
*********************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define WEI PORTC
#define DUAN PORTA
/********************************************************************
                数码管段码定义0123456789
*********************************************************************/
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint cnt=0000;//计数初值

uchar key_up;//加计数按键标志
uchar key_down;//减计数按键标志
/**********************************************************************
                                  MS级延时函数程序,参数i 延时时间                                                  
**********************************************************************/
void DelayMS(uint i)
{
uint j;
for(;i!=0;i--)
{
for(j=8000;j!=0;j--);
}
}
/**********************************************************************
                                            显示函数       
注意:使用开发板时WEI的四个值为0XEF,0XDF,0XBF,0X7F                                  
**********************************************************************/
void Led() //显示函数
{
uchar m=1;//消隐延时

WEI=0x01; //输出低电平,选通千位数
DUAN=table[cnt/1000]; //取出千位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x02; //输出低电平,选通百位数
DUAN=table[cnt%1000/100]; //取出百位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x04; //输出低电平,选通十位数
DUAN=table[cnt%100/10]; //取出十位数,查表,输出。
DelayMS(m); //延时
WEI=0x00;
DUAN=0xff;
WEI=0x08;
DUAN=table[cnt%10]; //取出个位数,查表,输出。
DelayMS(m);
WEI=0x00;
DUAN=0xff;
}
/**********************************************************************
                                           初始化I/O                                  
**********************************************************************/
void init_io(void)//初始化I/O
{
//设置A口为输出
DDRA=0XFF;
PORTA=0xFF;
//设置B口为输入
DDRB=0x00;
PORTB=0x00;
//设置C口为输出
DDRC=0XFF;
PORTC=0xFF;
}

/**********************************************************************
                                          按键扫描函数                          
**********************************************************************/

void get_key(void)//按键扫描函数

{
while((PINB&0X01)==0)//按键加计数标志
{key_up=1;
Led();
}
while((PINB&0X02)==0)//按键减计数标志
{key_down=1;
Led();}
}
/**********************************************************************
                                          主函数                          
**********************************************************************/
void main(void)
{
init_io();//初始化I/O

while(1)
{
get_key();//按键扫描
Led(); //显示
if (key_up==1)
       {
if(cnt!=9999)//判断是否计数到9999
             {
               cnt=cnt+1;//加一
               key_up=0;
                           }
        }
if (key_down==1)
     {
if(cnt!=0)//判断是否计数到0
       {
           cnt=cnt-1;//减一
       key_down=0;
       }
     }
}
}
/**********************************************************************
                                                  结束                          
**********************************************************************/



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表