芯启航 发表于 2024-11-29 14:21:42

《8051U深度入门到32位51大型实战教学视频》学习打卡

本帖最后由 芯启航 于 2024-11-29 14:23 编辑

打卡第三集,完成作业,已手敲代码,测试通过




芯启航 发表于 2024-11-29 14:26:16

第四集USB不停电下载-----手敲代码,测试成功


芯启航 发表于 2024-12-2 08:41:44

打卡第五集,已手敲代码,测试通过


芯启航 发表于 2024-12-2 08:42:59

跟着冲哥打卡第六集:IO口输入输出,已手敲代码,测试通过


芯启航 发表于 2024-12-3 16:00:30

本帖最后由 芯启航 于 2024-12-3 16:49 编辑

第7集定时器中断已学习 已手敲代码,测试通过

芯启航 发表于 2024-12-6 10:27:53

第8集定时器周期性调度任务

任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED3 0.9秒取反一次

391







芯启航 发表于 2024-12-6 10:54:36

任务2:数组点亮LED,实现流水灯


392


芯启航 发表于 2024-12-6 10:59:08

任务3:按键1按一下,LED通过数组移动一下


390

芯启航 发表于 2024-12-6 11:40:33

LED1 0.3秒闪一次,LED2 0.6秒闪一次,LED3 0.9秒闪一次

393



芯启航 发表于 2024-12-14 18:34:02

第九集 数码管 已手敲代码测试通过


任务一:数码管静态的显示一个数字




任务二:数码管显示“12345678”


任务三:数码管显示“00-00-00”分别代表时分秒,每过一秒钟秒+1
418

任务四:虚拟显示——LED和数码管
(1)效果图如下:


437
(2)代码如下:

#include "io.h"

u8 SEG_NUM[]=
{
    0x3F,       /*'0', 0*/
    0x06,       /*'1', 1*/
    0x5B,       /*'2', 2*/
    0x4F,       /*'3', 3*/
    0x66,       /*'4', 4*/
    0x6D,       /*'5', 5*/
    0x7D,       /*'6', 6*/
    0x07,       /*'7', 7*/
    0x7F,       /*'8', 8*/
    0x6F,       /*'9', 9*/
    0x77,       /*'A', 10*/
    0x7C,       /*'B', 11*/
    0x39,       /*'C', 12*/
    0x5E,       /*'D', 13*/
    0x79,       /*'E', 14*/
    0x71,       /*'F', 15*/
    0x40,       /*'-', 16*/
    0x00,       /*' ', 17*/
    0x80,       /*'.', 18*/
};

u8 T_NUM =
{
      0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
};

u8 State1= 0;                     //LED1初始状态
u8 State2= 0;                      //LED2初始状态
u8 State3= 0;                      //LED3初始状态

u16 Key_Vol;                                                //按键按下持续时间

void LED0_Blink(void)
{
      State1 = !State1;
      P00 = State1;
}

void LED1_Blink(void)
{
      State2 = !State2;
      P01 = State2;
}

void LED2_Blink(void)
{
      State3 = !State3;
      P02 = State3;
}

void Key_Task(void)
{
//      if( P32 ==0 )
//      {
//                Key_Vol++;
//                if(Key_Vol==5 )
//                {
//                        //按键按下的任务
//                        printf( "按键单击\r\n" );
//                }
//      }
//      else
//      {
//                Key_Vol = 0;
//      }
}

void Init_595(void)
{
      HC595_SER = 0;
      HC595_RCK = 0;      
      HC595_SCK = 0;      
}

void Send_595( u8 dat )
{
      u8 i;
      
      for( i=0;i<8;i++ )
      {
                dat <<= 1;                        //DAT = (DAT<<1);      //CY
                HC595_SER = CY;            //先把数据写在引脚上
                HC595_SCK = 1;                //输出上升沿的时钟信号
                HC595_SCK = 0;
               
      }

}

void Display_Seg(u8 HC595_1,u8 HC595_2)
{
      Send_595(HC595_1);                //数码管段码输出   高电平点亮
      Send_595(HC595_2);                //数码管位码       低电平点亮
      
      HC595_RCK = 1;                        //数据输出
      HC595_RCK = 0;
}      

u8 Seg_no = 0;
u8 shi= 0;
u8 fen= 0;
u8 miao = 0;

voidSeg_Task(void)
{
      u8 num=0;
      if(Seg_no==0)                                    //小时十位
      {
                num=shi/10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==1)                              //小时的个位
      {
                num=shi%10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==2)                              //第一个横杠
      {
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==3)                              //分钟的十位
      {
                num=fen/10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==4)                              //分钟的个位
      {
                num=fen%10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==5)                              //第二个横杠
      {
                Display_Seg( SEG_NUM, ~T_NUM);         //数码管刷段码和位码
      }
      else if(Seg_no==6)                              //秒钟的十位
      {
                num=miao/10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      else if(Seg_no==7)                              //秒钟的个位
      {
                num=miao%10;
                Display_Seg( SEG_NUM, ~T_NUM);      //数码管刷段码和位码
      }
      
      else
      {
               
      }
      Seg_no ++;
      if( Seg_no >7)
                Seg_no=0;
}
voidTIMECOUNT_Task(void)
{
      miao ++;
      if( miao>59)
      {
                miao=0;
                fen++;
                if(fen>59)
                {
                        fen=0;
                        shi++;
                        if(shi>23)
                              shi=0;
                }
      }
}
u8 state_now = 0;

void PLED_40(void)
{
      u8 cod;
      cod = 0x0f;                //表示开启P0-P3
      cod = 0x01;                //P0端口
      cod = 0X01;                //P1端口
      cod = ~T_NUM;                //P2端口
      cod = 0X01;                //P3端口
      LED40_SendData( cod,5 );

      P2 = ~T_NUM;
      
      state_now++;
      if( state_now>7)
                state_now = 0;
}

void SEG_PC (void)
{

      u8 cod;                                                                              
      
      cod= SEG_NUM;
      cod= SEG_NUM;
      cod= SEG_NUM;

      cod= SEG_NUM;
      cod= SEG_NUM;
      cod= SEG_NUM;
      
      cod= SEG_NUM;
      cod= SEG_NUM;
      
      SEG7_ShowCode(cod);
}

      






页: [1] 2
查看完整版本: 《8051U深度入门到32位51大型实战教学视频》学习打卡