数码管中断实验

发布者:Huanle最新更新时间:2016-08-04 来源: eefocus关键字:数码管  中断实验 手机看文章 扫描二维码
随时随地手机看文章
数码管中断实验 - cailing_07@126 - cailing_07@126的博客


数码管中断实验 - cailing_07@126 - cailing_07@126的博客
 

学习了低电平触发与边沿触发的区别,不同中断的使用。

参考程序代码如下


#include
#include
#include "delay.h"
#define uint  unsigned int
#define uchar unsigned char
//uchar led7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴7段数码管显示0-9对应的8bit
uchar led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳7段数码管显示0-9对应的8bit
uchar position[4]={0x01,0x02,0x04,0x08};//4片数码管对应的片选bit
uchar buffer[4];//每位需要显示的数字都放在此数组中
uchar time[2];//分,秒数组
uchar timecounter;//计时循环

void main(void)//主函数
{
 uchar i;
 Init();           //初始化端口及接口
time[0]=12;     //初始化时间
time[1]=34;     //初始化时间
DoBuffer();       //把2个十位数变为4个个位数
 init_devices();
  while(1)
 {
   Display();    //动态扫描时间为8ms

   if(timecounter++>100)  //循环100次,即8*100约为1秒延时
   {
    timecounter=0;
     if(time[1]++>59) //秒加1,并且判断是否为60
      {
       time[1]=0;
    if(time[0]++>59)//分加1,并且判断是否为60
    {
     time[0]=0;
    }
      }
   DoBuffer();
  }
 }
}

void Init(void) //初始化设置
{
 DDRA=0x0f;     //设置端口A的低四位为输出
 PORTA=0x08;    //设置端口A的低四位为输出为低电平
 DDRB=0xff;     //设置端口B方向为输出
 PORTB=0xff;    //设置端口B输出高电平
}

void Display(void)//扫描显示函数,单个扫描时间为2ms
{
  uchar i;
  for(i=0;i<4;i++)
  {
   PORTB=led7[buffer[i]];    //4个数转成对应的8位显示码送PORTB
   PORTA=position[i];       //选择1个8段码进行显示
   delay_ms(2);            //延时5毫秒,1秒显示25帧人眼是可以识别的,1/25=40ms,所以要小于40ms
   PORTA=0x00;              //关闭
  }
}

void DoBuffer(void)//时间数字分位,2个2位数变为4个1位数
{
 uint i,j=0;               //j不能忘记赋值
 for(i=0;i<2;i++)          //时间为2个2位数
  {
   buffer[j++]=time[i]/10;   //共2次循环,第一次中,第1个2位数取出十位
   buffer[j++]=time[i]%10;   //共2次循环,第一次中,第1个2位数取出个位
  }
}

#pragma interrupt_handler int0_isr:2
void int0_isr(void)       //INT0中断程序
{
while(!(PIND&(1< {
 PORTB=led7[buffer[3]];    //输出第4位数字
 PORTA=position[3];        //第4位数字片选开
 }
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
while(!(PIND&(1< {
 PORTB=led7[buffer[2]];   //输出第3位数字
 PORTA=position[2];       //第3位数字片选开
 }
}


void init_devices(void)
{
 CLI();       //清除所有中断标志
 MCUCR = 0x00;//INT0 INT1 下降沿产生中断请求
 GICR=0xc0;  //设置int0和int1中断允许
 SEI();        //开全局中断
}

关键字:数码管  中断实验 引用地址:数码管中断实验

上一篇:USRAT通信测试
下一篇:ARM-数据处理指令-赋值操作

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

51实验7:所有的数码管都显示同一个数字(0-9随意)
#include reg52.h typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; void delay(u16 i) { while(i--); } u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71}; void DigDisplay() { u8 i; for(i=0;i 8;i++)
[单片机]
静态和动态控制数码管
1 什么是数码管 1.1 几方面看数码管 (1)外观。 (2)作用:数码管是显示器件,用来显示数字的。 (3)分类:单个(1位)、联排(2位、4位、8位)。 1.2 工作原理 (1)亮灭原理(其实就是内部的照明LED)。 (2)显示数字(甚至文字)原理:利用内部的LED的亮和灭让外部的组成数字的笔画显示或者不显示,人看到的就是不同的数字。 1.3 共阳极和共阴极数码管 (1)驱动方法的差异。必须清楚一个数码管内部的8颗LED是独立驱动的。如果8颗LED的正极接在一起接到VCC上(负极分别接到单片机的不同引脚),这种接法就叫共阳极。反之如果8颗LED负极接在一起然后接到GND(正极就分别接到单片机的不同引脚)就叫
[单片机]
静态和动态控制<font color='red'>数码管</font>
基于MAX7219的数码管显示
在学习了单片机驱动7段数码管显示电路后,了解实际应用中多是利用的专门的数码管显示驱动芯片,例如MAX7219多功能串行LED显示驱动芯片。MAX7219是一款串行共阴极数码管动态显示驱动芯片,其峰值段电流可达40mA,最高串行扫描频率为10MHz,典型扫描频率为1.3kHz,仅使用3线串行接口传送数据,可直接与单片机接口,可以方便的修改内部参数以实现多位LED显示。内部含硬件动态扫描显示控制电路,每片芯片可同时驱动8位共阴极LED或64个独立的LED,多片MAX7219级联时,可控制更多的LED。 主要器件为AT89C52、LED显示驱动芯片MAX7219、8个7段共阴极数码管等。 试验电路图: 试验
[单片机]
基于MAX7219的<font color='red'>数码管</font>显示
简易一小时定时器 数码管显示
近些天图书馆收书,规定人离开座位不能超过15分钟不然就会把书收走,所以制作了一个计时器,用来指示人离开的时长,按照最简需求设计,计时时长为1小时,超出时间清零。 附带了一个按键,用于计时过程中的暂停,这样这个计时器可以当作秒表使用了,做个题什么的限制一下时间又不用占用手机。而且最关键的是小巧,看起来不会太蠢... 说明: 1.单片机使用STC15F104W,共有6个I/O 2.数码管为时钟样式的数码管,中间带有“:”的,焊接时按照最短路径焊接,移植程序请考虑修改smgduan 的段选值 3.程序定时器0初始值是在12MHz晶振下的初始值,移植程序时请注意修改 4.数码管采用74HC138+74HC59
[单片机]
简易一小时定时器 <font color='red'>数码管</font>显示
数码管和流水灯同时工作
#include reg52.h #define uint unsigned int #define uchar unsigned char uchar code temp ={0x80,0xe3,0x44,0x41,0x23,0x11,0x10,0xc3,0x00,0x01}; //数码管由0~9的显示 char code b ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf, 0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x01,0x03,0x07,0x0f,0x1f, 0x3f,0x7f,0xf
[单片机]
(海尔)东软单片机 HR7P153 SOP-16数码管显示程序
HR7P153 SOP-16三个数码管显示,共阴极。 单片机源程序如下: #include hic.h #include math.h #define u8 unsigned char #define u16 unsigned int u16 i,a=0; u8 const SEG7 ={0x77,0x06,0xb3,0x97,0xc6,0xd5,0xf5,0x07,0xf7,0xd7}; u8 const ACT ={0xfb,0xf7,0xef,}; /****************/ void Ram_Clr(void) //ram全清 { __asm { CLR IAAL; C
[单片机]
一起学mini2440裸机开发(十)mini2440外部中断实验
我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表,直接像利用51单片机那样的中断一样使用它,但是也没成功。考虑到程序跑飞的可能性,将程序利用MDK中的Download功能下载到了Nor Flash中去,竟然行了,想了想原因,明白是怎么回事了。我原来是利用jlink调试的方法,这种调试方式是直接将程序放到了SDRAM的0x3000 0000处,如果发生中断后,比如发生了普通中断IRQ,那么PC指针被强制设为0x0000 0018,而我的程序是放在了0x3000 0000处,在地址0x
[单片机]
一起学mini2440裸机开发(十)mini2440外部<font color='red'>中断实验</font>
TM1640与PIC12F629单片机的结合
TM1640是驱动数码管的专用集成电路,可以直接驱动16位共阴数码管,手册请下载附件。 /******************************* *本程序直接驱动16位共阴数码管,各数码管分别驱动0、1、2、……E、F。 */ #include pic.h //PIC12F629 __CONFIG(0x3F84); #define clk GPIO0 //时钟信号 #define dio GPIO1 //数据/地址数据 #define uchar unsigned char #define uint unsigned int
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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