ATmega16L-体育秒表设计

发布者:BlossomSunrise最新更新时间:2012-08-22 来源: 51hei关键字:ATmega16L  体育秒表  数码管 手机看文章 扫描二维码
随时随地手机看文章

//有两个按键,其中一个接INT0,另一个接PD7

//启动时,数码管显示00.00 ,按下INT0 ,开始计时

//再按下INT0,计时停止。

//无论何时,按下PD7,计时清零。

//问题在于:时间不准,比1秒慢。时间转过一分钟,计时只有36秒。此时熔丝位为
点击浏览下一页
 

#include
const unsigned char duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                              0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
const unsigned char weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char shu[8];
unsigned int aa;
unsigned int cnt;    
/****************************************
               延时函数
****************************************/
void delay(unsigned char t)
{
   unsigned char x,y;
   for(x=t;x>0;x--)
    for(y=100;y>0;y--);
}

/****************************************
               显示函数
****************************************/
void display(void)
{
 unsigned char i;
 for(i=0;i<4;i++)
 {
  PORTB =0X00;
  PORTA|=0X01;
  PORTA&=0XFE;
  
  PORTB =weima[i];
  PORTA|=0x02;
  PORTA&=0XFD;
  
  PORTB=shu[i];
  PORTA|=0X01;
  PORTA&=0XFE;
  
  delay(3);
 } 
}

/***************************************
             数据转换子函数
***************************************/
void change(unsigned int i)
{
 shu[0]=duanma[i/1000];
 shu[1]=duanma[i/100%10]|0x80;
 shu[2]=duanma[i%100/10];
 shu[3]=duanma[i%10];
}


/***************************************
             端口初始化
***************************************/
void init_port(void)
{
 PORTA=0XFF;
 DDRA=0XFF;
 PORTB=0XFF;
 DDRB=0XFF;
 PORTD=0XFF;
 DDRD=0X7B; // 0111 1011
}

/***************************************
             按键检测
***************************************/
void keyscan(void)
{
  if((PIND&0X80)!=0X80)
    {
  change(cnt);
  display(); //延时
  display();
   if((PIND&0X80)!=0X80)
    {
      cnt=0; //按键按下 计数清零
    }
 }
}

/***************************************
             定时器1初始化
***************************************/
void timer1_init(void)
{
 TCNT1H=0xd8;  //装10ms的定时器初值
 TCNT1L=0xf0;
}
/***************************************
             定时器1服务函数
***************************************/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
  TCNT1H=0XD8; //重装10ms的定时器初值
  TCNT1L=0XF0;
  if(++cnt>9999) cnt=0;
}


/***************************************
           INT0中断服务子函数
***************************************/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
 if(cnt<10)  TCCR1B=0x02;  //启动定时器1
 else   TCCR1B=0x00;  //关闭定时器1  
}


/***************************************
              IO及中断初始化
***************************************/
void init_interrupt(void)
{
 init_port();   //IO初始化
 timer1_init(); //定时器1初始化 
 MCUCR=0X02;    //INT0下降沿触发
 GICR=0X40;     //使能INT0
 TIMSK=0X04;    //使能T1中断 
 SREG=0X80;     //使能总中断
}


/***************************************
                MAIN
***************************************/        
void main(void)
{
 init_interrupt();
 while(1)
  {       
   change(cnt);
   display();
   keyscan(); 
  }
}
关键字:ATmega16L  体育秒表  数码管 引用地址:ATmega16L-体育秒表设计

上一篇:ATmega16L-定时器数码管扫描
下一篇:ATmega16L-EEPROM读写操作实验

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

TM1637数码管显示STC51单片机驱动程序
/* Coder : Farman Date : 2018-01-02 参考了厂家的TM1637数据手册,在此表示感谢。 */ #include STC89C5XRC.h //包含52单片机头文件 #include Delay.h //////////////////////////////////////////////////////////////////////////// sbit I2C_SCL = P2^1; //定义模拟IIC总线的时钟线 sbit I2C_SDA = P2^0; //定义模拟IIC总线的数据线 #define TM1637_BRIGHTNESS 7 // 0 - 7
[单片机]
89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
89C51单片机按键控制<font color='red'>数码管</font>动态显示0~9
51单片机实验4:静态数码管
开发板数码管模块电路图如下: 开发板数码管共阴连接,P0口通过输出阳极电平来控制段选,74ls138译码器通过控制8个数码管的阴极电平来控制位选。 实验任务:点亮第一个数码管并使其显示数字0; P2^2,P2^3,P2^4口置0,使138译码器译码为1000 0000,即第一个数码管阴极电平为0,其他7个数码管阴极电平为1。 P0口置为0x3f,即:0011 1111,(二极管a b c d e f亮,构成数字0) 代码如下: #include reg52.h #include intrins.h #define uc unsigned sbit lsa=P2^2; sbit lsb=P2^3; sb
[单片机]
51单片机实验4:静态<font color='red'>数码管</font>
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
手动显示 #include reg52.h //包含51头文件 #include intrins.h //包含移位标准库函数头文件 #define uint unsigned int #define uchar unsigned char sbit DU = P2^6;//数码管段选 sbit WE = P2^7;//数码管段选 //共阴数码管段选表0-9 uchar code tabel = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; /*==================================== 函数 : del
[单片机]
STC89C52单片机 点亮两个<font color='red'>数码管</font>,可以显示 00——10 共 11 个数字
时钟芯片DS1302 8位数码管显示
;8位 数码管 显示 ;P0 为段码口、P2 为位码口 ;时钟芯片:DS1302 ;-------------------------------------- DS1302 端口位定义: IO_DATA → P1.1 ; 数据传送总线 SCLK → P1.0 ; 时钟控制总线 RST → P1.2 ; 复位总线 ;--------------------------------------- 24C04 端口位定义: SDA → P3.6 ;24C01的串行数据线 SCLK → P3.7 ;24C01的串行时钟线 ;--------------------------------------- K
[单片机]
27-基于单片机的电梯仿真系统
具体实现功能 由AT89C51单片机+数码管+矩阵按键模块+LED灯等构成。 具体功能: (1)初始时电梯在1楼,当有按键按下时电梯到相应楼层; (2)电梯状态要有指示灯显示,即电梯目前运行到达楼层的实时显示,电梯升降的状态显示等。 (3)电梯内要有4层电梯的按键,还要有门的开关按键,并且电梯门需要有相关的动作(指示灯指示),电梯外每一层都要有上下的按键,除了第1,4层 (4)电梯上行的时候按下行按键,电梯不会停止,继续上行,向下反之。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得
[单片机]
27-基于单片机的电梯仿真系统
如何使用单片机制作一个手动计数器
1.实验任务 利用AT89S51单片机来制作一个手动计数器,在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示;硬件电路图如图19所示。 2.电路原理图 图4.10.1 3.系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的
[单片机]
如何使用单片机制作一个手动计数器
基于Atmega16L单片机的高精度频率调节器
1 引言     在现代化工业生产与高精度测试中,我们需要相当精确的频率来帮助判断设备性能指标。而且我们希望能够微调该频率。采用压控振荡器得到的频率不够精确,微调频率步骤烦琐,耗时漫长,因此有些测试项目限制了压控振荡器的使用。 Mega 系列单片机是Atmel公司于2002年起陆续推出的。这款AVR增强型单片机具有速度快,抗干扰能力强,价格低廉等诸多优点。为了加快AVR单片机的软 件编制,Atmel以及第三方提供的开发工具多种多样,程序开发方便有效。该单片机内部FLASH结构功能灵活,加锁后很难解密,可以最大限度地保护知识 产权。AVR单片机可以广泛应用于通信、野外测试、汽车电子、医疗器械等领域,并且适用于各种低电压、低功耗的场合
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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