登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 4档可调LED循环小灯

[复制链接]
发表于 2022-1-18 15:20:45 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 暂无
开始时间: 2022-01-18
结束时间: 2022-01-18
                                                                                       4档可调LED循环小灯 程序你们自己看吧,我就不注释了。有错误大家指出来,没错误可以参考参考,不懂可以讨论一下。自己写的,玩玩儿。    具体节目效果点链接:   www.bilibili.com/video/BV17S4y1o7rm/


#include<reg52.h>

sbit ENLED = P1^1;

sbit ADDR0 = P2^0;

sbit ADDR1 = P2^1;

sbit ADDR2 = P2^2;

sbit KEY1 = P2^7;

sbit KEY2 = P2^6;

sbit KEY3 = P2^5;

sbit KEY4 = P2^4;

unsigned char T0RL = 0;

unsigned char T0RH = 0;

unsigned char T1RL = 0;

unsigned char T1RH = 0;

bit a = 0;

unsigned char speed [4] = { 1, 5,  8 , 20 };

unsigned char keysta[4] = {1,1,1,1};

void timerdesigner(unsigned int ms);

void lookkey();

void keydriver();

void main()

{



   

         ENLED = 0;

         EA = 1;

         ADDR0 = 0;

         ADDR1 = 1;

         ADDR2 = 1;

         P2 = 0xFE;

         lookkey();

         while(1)

         {

           keydriver();



         }



}



void  keydriver()

{

   unsigned char i = 0;

   static char backup [4] = {1,1,1,1};

   for(i=0;i<4;i++)

   {

                 if(backup !=keysta   )

                 {



                   if(backup == 0 )

                   {



                         switch(i)

                         {

                                case 0:        timerdesigner(speed[0]);break;

                                case 1: timerdesigner(speed[1]);break;

                                case 2: timerdesigner(speed[2]);break;

                                case 3: timerdesigner(speed[3]);break;

                                default:break;



                         }





                   }



                   backup = keysta;



                 }





   }



}



void lookkey()

{

        unsigned long tmp1 = 0;

        tmp1 = 32768000/12;

        tmp1 = (tmp1*2)/1000;

        tmp1 = 65536 - tmp1;

        T1RH = (unsigned char )(tmp1>>8);

        T1RL = (unsigned char)tmp1;

        TMOD &= 0x0F;

        TMOD |= 0X10;

        TH1 = T1RH;

        TL1 = T1RL;

        TR1 = 1;

        ET1 = 1;



}





void  timerdesigner(unsigned int ms)

{

        unsigned long tmp;

        tmp = 32768000/12;

        tmp = (tmp*ms)/1000;

        tmp = 65536 - tmp;

        T0RH = (unsigned char)(tmp>>8);

        T0RL = (unsigned char)tmp;

        TMOD &= 0xF0;

        TMOD |= 0x01;

        TH0 = T0RH;

        TL0 = T0RL;

        TR0 = 1;

        ET0 = 1;

       

}





void InterruptTimer0()  interrupt 1

{

    static unsigned int i = 0;

        static unsigned int cnt1 = 0;

        TH0 = T0RH;

        TL0 = T0RL;

        cnt1++;

        if(cnt1>=50)

        {



           cnt1 = 0;

           if(a == 0)

           {

             i++;

             P0 = 0xFF;

                 P0 = P0>>i;

                  if(i == 8)

                  {

                        i = 0;

                        a = 1;





                   }

                  }

                  else

                  {

                        i++;

                        P0 = 0xFF;

                        P0 = P0<<i;

                        if(i == 8)

                        {

                          i = 0;

                          a = 0;



                        }



                  }





        }

}

void InterruptTimer1() interrupt 3

{



          

            unsigned char i = 0;

            static unsigned char keybuf[4] = {

            0xFF,0xFF,0xFF,0xFF};

                TH1 = T1RH;

            TL1 = T1RL;



                 keybuf[0] = (keybuf[0]<<1) | KEY1;

                 keybuf[1] = (keybuf[1]<<1) | KEY2;

                 keybuf[2] = (keybuf[2]<<1) | KEY3;

                 keybuf[3] = (keybuf[3]<<1) | KEY4;



                 for(i=0;i<4;i++)

                 {

                        if(keybuf == 0x00)

                        {



                         keysta = 0;

                        }

                        else if(keybuf == 0xFF)

                        {



                          keysta = 1;

                        }









                 }







}










好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表