51单片机实现定时器00H-FFH、定时器000-255

#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i,j,num;
uchar code leddata[]={
    0xC0,  //"0"
    0xF9,  //"1"
    0xA4,  //"2"
    0xB0,  //"3"
    0x99,  //"4"
    0x92,  //"5"
    0x82,  //"6"
    0xF8,  //"7"
    0x80,  //"8"
    0x90,  //"9"
    0x88,  //"A"
    0x83,  //"B"
    0xC6,  //"C"
    0xA1,  //"D"
    0x86,  //"E"
    0x8E,  //"F"
    0x89,  //"H"
    0xC7,  //"L"
    0xC8,  //"n"
    0xC1,  //"u"
    0x8C,  //"P"
    0xA3,  //"o"
    0xBF,  //"-"
    0xFF,  //??
};
uchar code ledwei[]={
    0x01,0x02,0x04,0x08,
    0x10,0x20,0x40,0x80
};
void delay(uint ms){
    uint i,j;
    for(i = 0;i < ms; i++)
    for(j = 0;j < 121; j++);
}
void timer_init(){
    TMOD = 0x01;
    TH0 = 0x3c;
    TL0 = 0x0b0;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}
void display(){
                P2 = ~ledwei[0];
                P0 = leddata[j];
            delay(50);
            P2 = ~ledwei[1];
            P0 = leddata[i];
            delay(50);
            P2 = ~ledwei[2];
            P0 = leddata[16];
            delay(50);
}
void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    timer_init();
    while(1)
    {
        display();
    }
}
void int0() interrupt 1{
    TH0 = 0x3c;
    TL0 = 0x0b0;
    count++;
    if(count == 20){
        count = 0;
        i++;
        num++;
        if(num == 255){
            num = 0;
            i = 0;
            j = 0;
        }
        if(i == 16){
            j++;
            i = 0;
            if(j == 16){
                 j = 0;
            }
        }
    }
}

定时器000-255

#include< reg51.h>
#define uint unsigned int
#define uchar unsigned char
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
uchar count;
uchar i,j,k,num;
uchar code leddata[]={
    0xC0,  //"0"
    0xF9,  //"1"
    0xA4,  //"2"
    0xB0,  //"3"
    0x99,  //"4"
    0x92,  //"5"
    0x82,  //"6"
    0xF8,  //"7"
    0x80,  //"8"
    0x90,  //"9"
    0x88,  //"A"
    0x83,  //"B"
    0xC6,  //"C"
    0xA1,  //"D"
    0x86,  //"E"
    0x8E,  //"F"
    0x89,  //"H"
    0xC7,  //"L"
    0xC8,  //"n"
    0xC1,  //"u"
    0x8C,  //"P"
    0xA3,  //"o"
    0xBF,  //"-"
    0xFF,  //??
    0xFF  //???
};
uchar code ledwei[]={
    0x01,0x02,0x04,0x08,
    0x10,0x20,0x40,0x80
};
void delay(uint ms){
    uint i,j;
    for(i = 0;i < ms; i++)
    for(j = 0;j < 121; j++);
}
void timer_init(){
    TMOD = 0x01;
    TH0 = 0x3c;
    TL0 = 0x0b0;
    ET0 = 1;
    EA = 1;
    TR0 = 1;
}
void display(){
                P2 = ~ledwei[2];
                P0 = leddata[i];
            delay(50);
            P2 = ~ledwei[1];
            P0 = leddata[j];
            delay(50);
            P2 = ~ledwei[0];
            P0 = leddata[k];
            delay(50);
}
void main(){
    P0M0 = 0x00;
    P0M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    timer_init();
    while(1)
    {
        display();
    }
}
void int0() interrupt 1{
    TH0 = 0x3c;
    TL0 = 0x0b0;
    count++;
    if(count == 20){
        count = 0;
        i++;
        num++;
        if(num == 255){
            num = 0;
            i = 0;
            j = 0;
            k = 0;
        }
        if(i == 10){
            j++;
            i = 0;
            if(j == 10){
                 j = 0;
                 k++;
            }
        }
    }
}

原文地址:https://www.cnblogs.com/weimin1314/p/8260582.html

时间: 2024-11-03 20:28:18

51单片机实现定时器00H-FFH、定时器000-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单片机的定时器

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

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m

51单片机指令详解

                                                            数据传递类指令 以累加器为目的操作数的指令  MOV A,Rn MOV A,direct MOV A,@Ri  MOV A,#data  第一条指令中,Rn代表的是R0-R7.第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的.第四条指令是将立即数data送到A中. 下面我们通过一些例子加以说明: MOV A,R1 :将工作寄存器R1中的值送入A,R

51单片机中断interrupt……using……

51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器: using 1 是第1组寄存器: using 2 是第2组寄存器: using 3 是第3组寄存器:51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1.RS0位决定的.using 0时设置 RS1=0,RS

51单片机的中断优先级及中断嵌套

说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套.现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了. 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了.实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂. 中断的优先级有两个:查询优先级和执行优先级. 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0 > 定时/计数器0 >

单片机(simple chip microcomputer)概论、51单片机、MCS-51单片机、STM32、ARM

catalogue 1. 单片机概论 2. 51单片机 3. MCS-51单片机 4. QX-MINI51开发板(STC89C52芯片) 5. STM32单片机 6. stm32f103zet6开发板实验 1. 单片机概论 0x1: 仿真器 单片机应用系统的软硬件调试需要专门的开发工具,称为"单片机开发系统"或"仿真机".常用的开发方式是把开发系统(例如PC)中的CPU和RAM暂时出借给用户系统,利用开发系统对用户系统的软硬件进行调试(又称仿真),然后将调试好的程序

基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目

一.前言 1.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路 2.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目构思 (1).声明程序变量思维导图 (2).程序子函数思维导图 (3).程序主函数思维导图 二.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目的Keil软件编写的单片机C语言程序 1 #include<reg52.h>//声明51单片机

51单片机之串口通信(三)

51单片机之串口通信(三) 已有 47 次阅读2015-12-29 00:21 |个人分类:51单片机| 单片机, 通信 用串口实现发送和接收同时可操作: 电脑显示结果如图: 源程序: /*项目名称:串口发送接收实验项目内容:串口发送接收同时进行,计算机发送数据给单片机控制P0口,从而控制LED灯的亮灭,单片机发送数据到计算机,计算机显示出来时间:2015年12月23日项目负责人:YUAN*/#include <reg52.h>typedef unsigned char uChar8;type