基于PIC16F877A的数码管显示

发布者:风轻迟最新更新时间:2016-11-04 来源: eefocus关键字:PIC16F877A  数码管显示 手机看文章 扫描二维码
随时随地手机看文章
//数码管显示

//★★★★★★★★★数码管显示★★★★★★★★★★★\\
//单征机型号:PIC16F877A
//功能描述:采用动态扫描方式,初始时显示123,当按下RB0时,数值加一,当按下RB1时,数值减一
//端口定义:RA0,RA1,RA2数码管位控制脚,RD口数码管段控制口,RB0加一按键,RB1减一按键。

 


#include
__CONFIG(0XF73A);      //芯片配置字节

const unsigned char disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9译码
char ba,sh,ge,keyb0,keyb1;
void dir();
void key();


//========================================================================
//功能描述:延时子程序 
//函数名称:delay); 
void delay()
{
 int i;
for(i=200;i>0;i--);
 }

//========================================================================
//功能描述:主程序 
//函数名称:void main() 
void main()
{
keyb0=0;
 ba=1;
sh=2;
ge=3;
 TRISA=0x00;
 TRISD=0x00;
 PORTA=0xff;
 while(1)
 {
  key();
  dir();
  } 
 }


//========================================================================
//功能描述:判断按键程序 
//函数名称:void key()
void key()
{
//------------------------------------------------------------------------
//判断RB0键是否作用,进行加一操作
if(RB0==0)     
 {
  delay();
  if(RB0==0)
   {
    if(keyb0==0)
    {
     keyb0=1;
     ge++;
     if(ge==10)
      {
       ge=0;
       sh++;
       if(sh==10)
        {
         sh=0;
         ba++;
        if(ba==10)
         {ba=0;}
        }
      }
    }
  }
 }
else keyb0=0;

//------------------------------------------------------------------------
//判断RB1键是否作用,进行减一操作
if(RB1==0)
 {
  delay();
  if(RB1==0)
   {
    if(keyb1==0)
     {
      keyb1=1;
      ge--;
      if(ge==255)
       {
        ge=9;
        sh--;
        if(sh==255)
         {
          sh=9;
          ba--;
         if(ba==255)
          ba=9;
          }
        }
      }
    }
  }
else keyb1=0;
}

//========================================================================
//功能描述:显示程序 
//函数名称:void dir()
void dir()
 {
PORTA=0xfb;        //选中个位数码管
PORTD=disp[ge];    //往个位数码管送数
delay();           //延时一段时间,保证亮度
PORTA=0xfd;
PORTD=disp[sh];
delay();
PORTA=0xfe;
PORTD=disp[ba];
delay();
   }

关键字:PIC16F877A  数码管显示 引用地址:基于PIC16F877A的数码管显示

上一篇:SPI串行通信模块应用(一)
下一篇:PIC中断的应用(一)

推荐阅读最新更新时间:2024-03-16 15:19

51单片机矩阵键盘检测源代码(按键数码管显示0-F)
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略. hex文件及其工程文件下载:http://www.51hei.com/f/juzhen.rar 以下是通过测试的源代码: /* *功能:使用矩阵按键使得按键按下时数码管上显示各自对应的数字(0 ~ F); *日期:2013-05-03-17:51; *作者:徐冉 *特别说明:本程序代码已经通过调试,仅供学习使用; * */ /***********AT89C52-RC 单片机51hei 实验板***********/ /*****************51hei-开发板****************
[单片机]
PIC16F877A流水灯Proteus仿真程序
单片机源程序如下: //流水灯 #include pic.h //头文件 __CONFIG(0xff32); //配置熔丝位 //延时函数 void delay(unsigned int x) { unsigned int i,j; for(i=0;i x;i++) for(j=0;j 100;j++); } //主函数 void main() { unsigned char i,a; //设置变量 TRISB=0; //设置端口B为输出 PORTB=0;
[单片机]
<font color='red'>PIC16F877A</font>流水灯Proteus仿真程序
51单片机数码管串行显示板制作
材料准备:共阴极SEG6个(小编做了4个)、SN74HC595N6个(小编用了4个)、插针、导线若干 SEG数码管显示 数码管串行显示原理图 74hc595管脚说明:单片机通过少量的端口串行控制多位数码管显示。 595结构图 595程序在单片机中的调用程序: /****************595时序及显示函数************************/ void display(void) //显示6位数据 { uchar i,dat; char j; //p=Date; for(j=5;j -1;j--) //6位数据依次循环 { dat=table ]; if(j==0){dat=0;} if(j
[单片机]
51单片机<font color='red'>数码管</font>串行<font color='red'>显示</font>板制作
PIC16F877A 看门狗定时器(WDT)
//PIC.H中定义了宏 #define CLRWDT() asm( clrwdt )因此在PICC的c语言中可以直接使用CLRWDT()对WDT清0 //若单片机WDT使能,在适当位置加入CLRWDT(),程序进入正常运行时,每隔一定时间均会执行CLRWDT()语句对WDT清0,芯片不会复位 //如果程序陷入死循环,不会执行到CLRWDT()语句,则超出所设定的时间后,WDT溢出使芯片复位,从头(000H)开始执行,单片机恢复正常运行 //PIC16F单片机,看门狗定时器的启用只能在芯片的烧写时确定,即无法用软件来开启或关闭WDT,但在PIC16f88X中可以。 //PIC16单片机的WDT基本溢出时间为18MS,由RC充放电
[单片机]
基于stc89c52rc单片机的数字钟设计(数码管显示
事情总是看着简单,做起来没那么容易。 这个程序我开始时是根据教程编的,有些地方不理解就匆匆略过……事实证明这是不可取的…… 写了百十来行以后编译,报错!就不会解决了。 这时才体会到基础是多么重要!!! 学习方法要科学,要知其然,更要知其所以然。 就像罗哥说的,从原理入手…… 感谢 刘鹏 百忙之中抽出时间指导,真是我的良师和益友。。。。。。。 ***************************************************** 把程序贴出来。大家学习学习。千万不要ctrl c,ctrl v。 全部代码下载地址:http://www.51hei.com/f/ssz.rar ******************
[单片机]
单片机红外解码,短按开关灯,长按调光,数码管显示键值
//红外解码,实验板测试正常,8位数码管显示遥控编码(用户码,用户反码,右边3位数码管显示PWM值), //两片74hc573驱动8位共阴数码管 //CH-键短按开关灯,+键长按调光,数码管显示键值;长按调光的解码程序目前网上很难找到,我琢磨了很久才把程序调通//压缩包里有完整的程序代码,有逻辑分析仪测试的连发码的波形 单片机源程序如下: #include INCSTC89C52RC.H #include INCMY_SET.H #include INCIR_NEC.H //调用NEC解码头文件 #define DIGI_PORT P0 // 宏定义数码管端口,如果端口改变,只需修改这一句即可 #d
[单片机]
单片机红外解码,短按开关灯,长按调光,<font color='red'>数码管</font><font color='red'>显示</font>键值
数码管动态显示1——7,循环右移
数码管动态显示1 7,循环右移 * 功 能:数码管动态显示1 7,循环右移 * * 芯片:Amega16L * * 时钟频率:内部4M * * 编译环境:ICC-AVR7 * #include iom16v.h #include macros.h #define uint unsigned int #define uchar unsigned char #define on_138 PORTC|=BIT(PC7) //on or off 138 #define off_138 PORTC&=~BIT(PC7) #pragma data:code uchar flash table ={0x3f,0x
[单片机]
<font color='red'>数码管</font>动态<font color='red'>显示</font>1——7,循环右移
数码管显示 0-9999计数器
;=========================================== 四位显示器,是可以显示0000~9999的,但是在设计工程实际的产品时,前三个0,是不应该显示的。 一个成熟的程序,都应该有消除无效0的程序段。 消除无效0,其实就是用“空白”的代码来代替“0”。 在程序中,大家都知道有个七段码表,一般是把0123...的七段码依次排列在里面,那么第0~15个,通常就是0~F的七段码。 如果把“空白”七段码FFH,排在第16个位置,那么“空白”的代码就是16。 消除无效0的程序,应该从高位到低位(千位、百位、十位)依次判断,个位的0,是应该显示的,则不用判断。 某一位是0,就替换为16,如果不是0,不仅不用替
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved