首页 > 其他分享 >51单片机-利用定时器控制LED灯轮闪

51单片机-利用定时器控制LED灯轮闪

时间:2023-07-20 10:25:41浏览次数:40  
标签:LED1 P2 LED3 LED void PRESS 51 单片机 sbit

#include "reg52.h"
// #include "delay.h"
#include "intrins.h"
#include <stdio.h>
typedef unsigned int u16;
typedef unsigned char u8;
typedef unsigned int uint;
typedef unsigned char uchar;
#define LED_PORT P2
#define SMG_A_DP_PORT P0
#define SMG_PORT P0
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;
u8 gsmg_code[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
                    0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

sbit LED1 = P2 ^ 0;
sbit LED2 = P2 ^ 1;
sbit LED3 = P2 ^ 2;
sbit LED4 = P2 ^ 3;
sbit LED5 = P2 ^ 4;
sbit LED6 = P2 ^ 5;
sbit LED7 = P2 ^ 6;
sbit LED8 = P2 ^ 7;
sbit KEY1 = P3 ^ 1;
sbit KEY2 = P3 ^ 0;
sbit KEY3 = P3 ^ 2;
sbit KEY4 = P3 ^ 3;

unsigned int num = 921;
unsigned int time = 0;

// #define KEY1_PRESS 1
// #define KEY2_PRESS 2
// #define KEY3_PRESS 3
// #define KEY4_PRESS 4
// #define KEY_NO_PRESS 0

// unsigned char key_scan(unsigned char mode)
// {
//     static unsigned char key = 1;
//     if (mode)
//     {
//         key = 1;
//     }
//     if (key == 1 && (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0))
//     {
//         delayms(10);
//         key = 0;
//         if (KEY1 == 0)
//         {
//             return KEY1_PRESS;
//         }
//         else if (KEY2 == 0)
//         {
//             return KEY2_PRESS;
//         }
//         else if (KEY3 == 0)
//         {
//             return KEY3_PRESS;
//         }
//         else if (KEY4 == 0)
//         {
//             return KEY4_PRESS;
//         }
//     }
//     else if (KEY1 == 1 && KEY2 == 1 && KEY3 == 1 && KEY4 == 1)
//     {
//         key = 1;
//     }
//     return KEY_NO_PRESS;
// }

// void main2()
// {
//     unsigned char key = 0;
//     while (1)
//     {
//         key = key_scan(0);
//         if (key == KEY1_PRESS)
//         {
//             LED1 = !LED1;
//         }
//     }
// }

void time0_init(void)
{
    // timer
    TMOD = 0x01;               // TMOD=0000 0001B;
    TH0 = (65536 - num) / 256; // if num is 921 then 1ms
    TL0 = (65536 - num) % 256;
    TR0 = 1;
    // interrupt
    //  ET0 = 1;
    //  EA = 1;
}

// void delay10us(u16 ten_us)
// {
//     while (ten_us--)
//     {
//         _nop_();
//         _nop_();
//         _nop_();
//         _nop_();
//         _nop_();
//         _nop_();
//     }
// }
void exit0_init(void) // interrupt 0
{
    IT0 = 1; // 0 is dianping 1 is xiajiangyan
    EX0 = 1;
    EA = 1;
}
void exit1_init(void) // interrupt 1
{
    IT1 = 1; // 0 is dianping 1 is xiajiangyan
    EX1 = 1;
    EA = 1;
}

void main()
{
    time0_init();
    // exit0_init();
    // exit1_init();
    while (1)
    {
        if (time == 0)
        {
            LED1 = 0;
            LED3 = 0;
            LED5 = 0;
            LED7 = 0;
        }
        while (TF0 == 0)
            ;
        TF0 = 0;
        time++;
        if (time == 1000)
        {
            LED1 = !LED1;
            LED3 = !LED3;
            LED5 = !LED5;
            LED7 = !LED7;
            LED2 = !LED2;
            LED4 = !LED4;
            LED6 = !LED6;
            LED8 = !LED8;
        }
        if (time == 2000)
        {
            LED1 = !LED1;
            LED3 = !LED3;
            LED5 = !LED5;
            LED7 = !LED7;
            LED2 = !LED2;
            LED4 = !LED4;
            LED6 = !LED6;
            LED8 = !LED8;
            time = 0;
        }
        TH0 = (65536 - num) / 256;
        TL0 = (65536 - num) % 256;
    }
}

void delay2ms(u16 xms)
{
    while (xms--)
        ;
}

void exi0() interrupt 0
{
    delay2ms(1000);
    if (KEY3 == 0)
    {
        LED1 = !LED1;
    }
}

void exi1() interrupt 2
{
    delay2ms(1000);
    if (KEY4 == 0)
    {
        LED2 = !LED2;
    }
}
void time0() interrupt 1
{
    static u16 i = 0;
    TH0 = 0xfc;
    TL0 = 0x18;
    if (i == 0)
    {
        LED1 = 0;
        LED3 = 0;
        LED5 = 0;
        LED7 = 0;
    }
    i++;
    if (i == 2000)
    {
        i = 0;
        LED1 = !LED1;
        LED3 = !LED3;
        LED5 = !LED5;
        LED7 = !LED7;
        LED2 = !LED2;
        LED4 = !LED4;
        LED6 = !LED6;
        LED8 = !LED8;
    }
    else if (i == 1000)
    {
        LED1 = !LED1;
        LED3 = !LED3;
        LED5 = !LED5;
        LED7 = !LED7;
        LED2 = !LED2;
        LED4 = !LED4;
        LED6 = !LED6;
        LED8 = !LED8;
    }
}

  

标签:LED1,P2,LED3,LED,void,PRESS,51,单片机,sbit
From: https://www.cnblogs.com/dogingate/p/17567596.html

相关文章

  • Educational Codeforces Round 151
    AB略C(简)将密码\(P\)与\(S\)进行匹配,按顺序决定\(P_i\),为了避免\(P\)成为\(S\)的子串,每次贪心地选择当前匹配位置最靠后的。若出现匹配不上则“YES”。D有点意思。从基础的情况入手:设\(\{s_i\}\)为\(\{a_i\}\)的前缀和,弄出\(\{s_i\}\)的图像,让我们考虑第一个......
  • 错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseExcepti
    错误连接数据库[mysql]:org.pentaho.di.core.exception.KettleDatabaseException是一种常见的错误,通常在使用PentahoDataIntegration(PDI)工具连接到MySQL数据库时出现。本文将介绍这个错误的原因,以及如何解决它。在使用PDI工具连接到MySQL数据库时,经常会遇到数据库连接失败的......
  • vue项目安装lees-loader报错:Module build failed: Error: Cannot find module 'less'
    1-新搭建的一个项目,运行时报Modulebuildfailed:Error:Cannotfindmodule'less'错误原因:vue文件里面的style添加了 lang="less" 解决方案:安装less  npminstallless2-安装less后运行报错:Modulebuildfailed:TypeError:this.getOptionsisnotafunc......
  • rom dbutils.pooled_db import PooledDB什么作用
    `dbutils.pooled_db`是Python的一个模块,它主要用于创建和管理数据库连接池。`PooledDB`是这个模块中的一个类。在进行数据库操作时,建立和关闭数据库连接是一种非常消耗资源的操作,如果每次查询都重新建立和关闭连接,会造成很大的系统开销。同时,对于高并发的系统,如果每个用户操作都......
  • Android编译报错Caused by: java.lang.RuntimeException: Manifest merger failed wit
    Android编译报错Causedby:java.lang.RuntimeException:Manifestmergerfailedwithmultiple这种异常一般是引用了aar,如果项目中的manifestapplication配置和aar中不一样就会报错,比如android:icon和aar中不一致,则添加tools:replace="android:icon"配置即可。......
  • 51单片机-定制器控制LED灯
    #include"reg52.h"#include"delay.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSMG_A......
  • Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE
    Xcode15beta4(15A5195m)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发......
  • Linux系统Apache添加监听端口后无法启动服务并报错:Job for httpd.service failed beca
    导言:这是SELinux安全机制导致的。解决方法:1.查看当前httpd端口#semanageport-l|grephttp2.将对应端口加入SELinux,以8068为例#semanageport-a-thttp_port_t-ptcp80683.再次查看#semanageport-l|grephttp4.重启Apache服务#systemctlrestarth......
  • android transaction failed 29201/-1, size 0-0 line 3009
    解决"androidtransactionfailed29201/-1,size0-0line3009"错误引言在Android开发中,我们经常会遇到各种错误和异常。其中一个常见的错误是"androidtransactionfailed29201/-1,size0-0line3009"。这个错误通常与Fragment事务相关,并且可能会导致应用崩溃或功能异常......
  • 【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏8
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够......