51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > ◆本站实例 > 详细内容
数码管手动计数0~9999[M8515]
作者:admin  发布时间:2009/11/26  阅读次数:2319  字体大小: 【】 【】【

/********************************************************
程序名称:数码管手动计数0~9999
编译环境:CVAVR / 基于AVR
硬件对象:XY900_USB型学习开发系统板
实验描述:ATmega8515  
                   PA端口输出显示,PD3/PD4控制段/位选,PD5为按键
月夜听风  
mcusy_cn@126.com     http://www.mcusy.cn
********************************************************/
#include <mega8515.h>
#include <delay.h>
#define uint unsigned int
#define uchar unsigned char
#define duan PORTD.3 //定义段选
#define wei   PORTD.4 //定义位选
uchar table_d[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90,0x00};// 0~9的段码
uchar table_w[]=
{0x02,0x01,0x08,0x04,0x20,0x10,0x80,0x40,0xff};//8个位码表
uint count,q,b,s,g; //计数器,千,百,十,个
//-------------------------------------------------------
  
void number(void) //计数值分离
   {
       q = count/1000; //提取千
       b = count/100%10; //提取百
       s = count/10%10;//提取十
       g = count%10; //提取个
   }
//-------------------------------------------------------  
void display(void) //显示子函数
   {
       uchar t;
       for(t=0;t<=10;t++)//扫描速度
           {
               number();  
               duan=1;PORTA=table_d[q];duan=0;//显示千位
               wei=1;PORTA=table_w[4];wei=0;//选通第4个显示
               delay_ms(2); //1ms
               duan=1;PORTA=table_d[b];duan=0;//显示百位
               wei=1;PORTA=table_w[5];wei=0;//选通5个显示
               delay_ms(2);
               duan=1;PORTA=table_d[s];duan=0;//显示十位
               wei=1;PORTA=table_w[6];wei=0;//选通第6个显示
               delay_ms(2);
               duan=1;PORTA=table_d[g];duan=0;//显示个位
               wei=1;PORTA=table_w[7];wei=0;//选通7个显示
               delay_ms(2);
           }
   }

//-------------------------------------------------------
void main(void) //主函数
   {  
       DDRA = 0xff; PORTA = 0xff;
       DDRD = 0xff; PORTD.5 = 1;    
       while(1)//循环
             {
                 if(PIND.5 != 1) //按下了PD5键?
                 delay_ms(5);
                 if(PIND.5 != 1)
                     {
                           display();
                           count ++; //数加1
                           if(count == 10000) //是否计满了1万?
                           count = 0; //清零
                       }
                 display();
             }
   }

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号