51 单片机定时器数码管 从1数到100(带三个按键控制开始,暂停,复位)

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P2^7;
sbit duan=P2^6;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1~9    //0~9,0x77,0x7c,0x39,0x5e,0x79,0x71
uint number;
void delay(uint xms)//延迟函数
{
   uint i;uchar j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
void show(uint ge,uint shi)
{
    ge=number%10;
    shi=number/10;
      wei=1;
    P0 = 0xfe;
    wei=0;
    duan=1;
    P0=table[shi];
    duan=0;
    P0=0xff;
    delay(5);

    wei=1;
    P0=0xfd;
    wei=0;
    duan=1;
    P0=table[ge];
    duan=0;
    P0=0xff;
    delay(5);
}
void initial_mcu()
{
    TMOD=0x01; //定时器0和1工作在16位模式
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
    EA=1;
    ET0=1;
    //TR0=1;
}

void buttons()
{
         if(key1==0)
         {
            delay(10); //键盘消抖
            if(key1==0)
            {
               number=0;
            }
          } 

          if(key2==0)
         {
            delay(10); //键盘消抖
            if(key2==0)
            {
               TR0=1;
            }
          } 

          if(key3==0)
         {
            delay(10); //键盘消抖
            if(key3==0)
            {
               TR0=0;
            }
          }
}
void main ()
{
     initial_mcu();//定时器初始化
         while(1)
         {
            buttons();
              show();
         }
}
void timer0() interrupt 1
{
    uint num;
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
    num++;
    if(num==20)
    {
         num=0;
         number++;
         if(number==100)
         {
            number=0;
         }
    }
}
时间: 2024-08-01 10:12:26

51 单片机定时器数码管 从1数到100(带三个按键控制开始,暂停,复位)的相关文章

51单片机实现数码管动态显示

-------------------------------------------- 设计要求: 在8位8端的数码管上动态显示76543210,快速显示时人眼看到的效果为同时亮起 -------------------------------------------- 实现目标: -------------------------------------------- 数码管编码计算: -------------------------------------------- 实现代码: 1

51单片机定时器中断函数中变量初始化的问题

前几天在进行单片机实验时,目的是用定时器0写一个流水灯的程序,代码如下,编译没有问题,但就是灯不亮,检查了好几次始终找不到问题,现在找到了,分享一下 #include<reg51.h>//调用头文件 #define uint unsigned int //宏定义 #define uchar unsigned char #define long_time 10 //定时时间,每次50ms uint n=0; //查表变量 uchar temp[]={0xfe,0xfd,0xfb,0xf7,0xe

51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符. //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include<reg51.h> typedef unsigned char UINT8; UINT8 i=100; UINT8 j,k,temp,key; void delay(unsigned char i) { for(j=i;j>0;j--) for(k=125;k>0;k--); } UINT8 cod

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

[51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]

>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c 1 #include "delay.h" 2 /*------------------------------------------------ 3 uS延时函数,含有输入参数 unsigned char t,无返回值 4 unsigned char 是定义无符号字符变量,其值的范围是 5 0~255 这里使用

51单片机串口通信时的定时器设置的相关问题

51单片机在串口通信时需要有一个定时器去调节与计算机通信的波特率,而定时器设置时需要中断寄存器(IE), 定时器控制寄存器(TCON) ,还有T/C控制寄存器共同配合作用, 但在启动定时器功能时,这三个寄存器的配置顺序十分重要,因为在数据传输时的高速情况下,一点点的数据误差就会导致传输的数据出现错误.而在51单片机的串口通信时必须将配置TCON放在配置这三个寄存器的最后,因为在TCON中含有启动定时器的TR1和TR0位,若先启动后对工作方式和溢出率进行配置,就会导致启动时定时器根本无法像预先设定

51单片机中断机制(定时器/计数器)

单片机中断简介 52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下: INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 - 外部中断1,由P3.3端口线引入,低电平或下降沿引起 T0    - 定时器/计数器0中断, 由T0计数器计满回零引起 T1    - 定时器/计数器1中断, 由T1计数器计满回零引起 T2    - 定时器/计数器2中断, 由T2计数器计满回零引起 TI/RI - 串行口中断,串行端口完成一帧字符发送/接收后引起 其中T2是5

一天:51单片机从入门到一个动态数码管显示数字控制

最近进的公司是一个做路由器的..很多嵌入式工程师.有个项目( 智能空调控制)是跟嵌入式工程师对接,我做APP+PHP..他做服务器.我们用MQTT(由于emqtt是用erlang写的,所以我也学了点erlang,后期有时间分享一下,这个语言很好,很强大.特别抽象).这个项目激发了我对嵌入式的兴趣,于是乎.开始从51单片机搞起了..所以就有了这篇文章...今天搞得东西挺多.我最近都是笔记形式,不想以前写的那么详细...因为学的东西太多,白天在公司搞项目,没时间写太具体... 今天学了什么呢? >k

51单片机的定时器

今天想尝试使用串口通信来控制舵机旋转的时候,由于同时用到了定时器T0和T1(用来设定波特率).程序有点问题,运行不畅,所以现在想通过写篇文章重新来梳理对51单片机这两个定时器的理解. STC89C51系列单片机有两个定时器:定时器T0.定时器T1 一.首先了解到51单片机的常用晶振是12MHz的,内部一般是12分频的,也就是12T.所以每计数一次需要1us的时间 二.定时器的工作模式有四种,模式0,1,2的工作模式对T0 .T1都是相同的,但是模式3只有T0才有: 模式0:13位计时器,有TL0