PIC中断的应用(二)

发布者:LIGANG888最新更新时间:2016-11-04 来源: eefocus关键字:PIC  中断 手机看文章 扫描二维码
随时随地手机看文章
//中断的应用二

//★★★★★★★★★数字钟★★★★★★★★★★★\\
//单征机型号:PIC16F877A
//功能描述:数字钟功能,初始显示时间为12点,且带手动调整时间功能。
//端口定义:RA0~RA5数码管位控制口、RD0~RD7数码管段控制口、RB0秒增一、RB1分增一、RB2时增一。


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

const unsigned char dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选0~9
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};         //位选,数码管1~8
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};                                  //时间数据寄存器
unsigned int tcnt;           //百分之一秒计数器
unsigned char second;        //秒计数器
unsigned char minite;       //分计数器
unsigned char hour;          //时计数器
unsigned char dispbitcnt;    //显示子程序中段与位显示计数器
bit keyb0,keyb1,keyb2;       //RB0,RB1,RB2按键作用标志位
       
//========================================================================
//功能描述:延时子程序 
//函数名称:delay); 
void delay()
{
 int i;
 for(i=80;i>0;i--);
 }

 

//========================================================================
//功能描述:显示子程序 
//函数名称:disp(); 
void disp()
{

PORTA=dispbitcode[dispbitcnt];
PORTD=dispcode[dispbuf[dispbitcnt]];
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
delay();
}

//========================================================================
//功能描述:端口初始化 
//函数名称:portinit(); 
void portinit()
{
TRISA=0x00;         //PA口设为输出
TRISB=0xff;         //PB口设为输入
TRISC=0x00;         //PC口设为输出
TRISD=0x00;         //PC口设为输出
PORTA=0x00;         //PA口设为输出为0
PORTB=0x00;
PORTC=0x00;
PORTD=0;
tcnt=0;
second=0;
minite=0;
hour=12;
dispbitcnt=0;
keyb0=0;
keyb1=0;
keyb2=0;
}

//=====================================================================
//功能描述:定时中断服务 
//函数名称:TimeInt(); 
void interrupt TimeInt(void) 
 { 
   tcnt++;
   if(tcnt==20)
    {
     tcnt=0;
     second++;
     if(second==60)
      {
       second=0;
       minite++;
       if(minite==60)
        {
         minite=0;
         hour++;
         if(hour==24)
          { 
           hour=0;
          }
        }
     }
  } 
dispbuf[0]=hour/10;
dispbuf[1]=hour%10;
dispbuf[2]=minite/10;
dispbuf[3]=minite%10;
dispbuf[4]=second/10;
dispbuf[5]=second%10;
dispbuf[6]=tcnt/10;
dispbuf[7]=tcnt%10;


 TMR0 = 0x3d;                                          //定时初值 
 T0IF = 0;                                             //清除标志 
 }


//========================================================================
//功能描述:中断设置 
//函数名称:IdsInit(); 
void IdsInit(void) 
 { 
   OPTION = 0x87;                                        //分频因子 
   TMR0 = 0x3d;                                          //定时初值   
   T0IE = 1;                                             //开启定时        
   GIE = 1;                                              //准许中断 
 }

 

//========================================================================
//功能描述:手动调时子程序 
//函数名称:key(); 
void key()
{
if(RB0==0)
 {
  delay();
  if(RB0==0)
   {
   if(keyb0==0)
    {
     keyb0=1;
     second++;
     if(second==60)
     {second=0;}

     }
    }
   }
  else keyb0=0;
if(RB1==0)
 {
  delay();
  if(RB1==0)
   {
    if(keyb1==0)
     {
      keyb1=1;
      minite++;
      if(minite==60)
       {minite=0;}
      }
     }
    }
   else keyb1=0;
if(RB2==0)
 {
  delay();
  if(RB2==0)
      {
    if(keyb2==0)
     {
      keyb2=1;
      hour++;
      if(hour==24)
       {hour=0;}

      }
     }
    }
   else keyb2=0;
}

 

 

//========================================================================
//功能描述:主程序 
//函数名称:main(); 
main()
{
    portinit(); //端口初始化
    IdsInit();  //TMR0初始化
 while(1) 
 {
   disp();
   key();  
 }
}

关键字:PIC  中断 引用地址:PIC中断的应用(二)

上一篇:PIC中断的应用(一)
下一篇:PIC定时器的使用

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

PIC12C508单片机控制灯光源程序
;P IC 12C508 单片机 控制灯光源程序 ;以上程序使用PIC12C508 单片机 ,内部4M Hz 时钟,4脚输入50HZ脉冲信号,7,6,3脚(GP0,GP1,GP4端口)为输出口。其中渐变部分是让灯慢慢的变亮(或灭)。不知道以上程序有没错误,有错误之处请大家多多给意见。谢谢 ;程序如下: GPI0 EQU 6 COUNT1 EQU 11 COUNT2 EQU 12 COUNT3 EQU 13 COUNT4 EQU 14 COUNT5 EQU 15 POINTER EQU 16 POINTER1 EQU 17 ORG 00H MOVLW 07H ;设定时钟参数1:256 分频 OPTION MOVL
[单片机]
JDM PIC 编程器的制作
rd09朋友提供了FENG3对JDM PIC 编程器改进版的制作方法,我照做了一个,觉得这是一款性价比非常高的烧写器,为让大家在制作过程中少走弯路,尽快品尝到成功的喜悦,特撰此文共享。 JDM PIC 编程器最初的设计是一个奇特的创新,它非常灵活地运用了三极管及串口的工作原理,在无外部电源供应的情况下实现了VDD+5V、VPP+ 13V电源供应和时钟、数据的收发。而且串口的使用也不拘泥于其端口引脚的原定义,令人不得不佩服设计者的智慧。当初原设计时作者应该写了一个DOS下的驱动,而后来IC-PROG对其的支持使其在WINDOWS下面发扬光大。鉴于现在JDM被推荐和受欢迎的程度,我们实在应该感谢Jens Dyekjar Madse
[单片机]
JDM <font color='red'>PIC</font> 编程器的制作
STM32 IIC 详解 之 stm32 IIC 从机模式(中断方式收发数据)
1、IIC简介 第二节代码会用到该部分内容,对于IIC来说,从机是不能主动发送数据的,开始条件都是由主机生成。 1.1、主机发送数据流程 1) 主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始 2) 主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0) 3) 相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0) 4) 主机收到从机的应答信号后开始发送第一个字节的数据 5) 从机收到数据后返回一个应答信号 ACK 6) 主机收到应答信号后再发送下一个数据字节 7) 当主机发送
[单片机]
STM32 NVIC 中断优先级管理
CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。而我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,又只有 60 个(在 107 系列才有 68 个)。 在 MDK 内,与 NVIC 相关的寄存器,MDK 为其定义了如下的结构体:   typedef struct   {   vu32 ISER ;  
[单片机]
STM32 NVIC <font color='red'>中断</font>优先级管理
PIC单片机实现的IC卡读写器
摘要:详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。 关键词:PIC单片机 IC卡读写器 SPI方式 USART方式 引言 本设计的主要目的是介绍IC卡的数据存储技术和IC卡的数据通信,因而使用存储器卡。由于本设计中既可与IC卡进行串行同步通信,又要与上位机进行中行异步通信,因而需要选择一种同时具有这两种通信方式的单片机。因为PIC16F877不仅具有本设计所需要的两种通信方式,而且还具有运行速度快、低功耗、价格低等优点,所以选择PIC16F877单片机作为本设计的单片机。 图1是本
[单片机]
安防监控调测仪的中断点检测功能设计
引言   调像仪又称安防监控调测仪,是一款用于对监控系统进行测试的仪器。在监控项目现场施工及维护过程中,经常需要对摄像设备的姿态、通信线路、电源等进行测试,使用该款仪器可减少日常工作量,提高工作效率。   在现场的安装及维护过程中,经常出现同轴线缆断路的现象,如外力拉断、老鼠咬断等,导致图像无法传输。而线缆多是隐藏在天花板内、地下、墙壁管线内等不容易检测的地方,这就对仪器提出增加断线检测功能的需求。通过在线缆的一端测试,可直接测量出线缆的长度(即断点的位置),从而帮助施工人员快速确认故障位置,及时维修。 1 检测原理   根据TDR理论,在同轴线缆的一端发送低压脉冲,当终端负载阻抗与线缆特征阻抗相等时,发射脉冲被负载完全吸
[安防电子]
安防监控调测仪的<font color='red'>中断</font>点检测功能设计
选择PIC单片机存储体0或1的方法
PIC单片机中级产品PIC16C6X的数据存储器通常分为两个存储体,即存储体0(Bank0)和存储体1(Bank1)。每个存储体都是由专用寄存器和通用寄存器两部分组成的。两个存储体中的一些寄存器单元实际上是同一个寄存器单元,却又具备有不同的地址。例如本版介绍的PIC16F84的状态寄存器STATUS-Reg的两个地址是03H和83H。又如通用寄存器也是如此。   不同型号的PIC单片机,其数据存储器的组成(即功能)是不完全相同的,所以设计人员一旦选用了某个PIC单片机的型号后,常要查找该单片机的数据存储器资料,以便编程用。   笔者以PIC16F84在MPLAB集成开发软件的环境下编写的源程序中,有关RB口(RB7、RB6…RB0
[单片机]
关于PIC单片机的一些经验总结
为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见. 2.PIC单片机的概述 PIC16F616是一款14引脚、8位的CMOS单片机.采用精简指令集,仅有35条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于提高单片机的运行速度和执行效率. PIC16F616这款单片机供电电压可以在2V到5.5V之间,内部集成了一个RC振荡器,频率可以配置成8MHZ或者4MHZ,也可以用外部
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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