登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 单片机学习

[复制链接]
发表于 2022-1-14 20:46:57 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 从零开始学单片机,努力做出作品
开始时间: 2022-01-16
结束时间: 2022-02-28
c语言
1.while 循环
   while(逻辑表达式,为真则执行,为0不执行)
       {
          循环体
       }
2.for 循环
   for(初始化;逻辑表达式;更改条件)
      {
           循环体
      }
   先执行初始化,表达式成立,执行循环体,更改条件,至表达式不成立,跳出循环
3.if(逻辑表达式,成立执行语句体1,不成立执行语句体2)
     {
         语句体1
     }
   else
     {
        语句体2
     }
4.switch(变量)
       {
           case 常量1:语句体1;break;
           case 常量2:语句体2;break;
           ……
           default:语句体x;break;
       }
   变量与各个常量之间对比,相等执行对应语句体,没有相等执行default
5.与&    1&1为1,1&0为0;或|;异或^   0^1为1,0^0为1,1^1为0;取反~   


更改LED闪烁时长:
STC-ISP里更改定时长度,(秒到毫秒1000)8051指令集改为STC-Y1,复制代码到keil,添加#include <INTRINS.H>

任意毫秒参数延时:
void Delay1ms (unsigned int xms)
{
    unsigned char i, j;
    while(xms)
    {
       i = 2;
       j = 239;
      do
      {
            while  (--j);
       }    while  (--i);
       xms--;
    }
}
(P2=0xEF;后添加Delay1ms( 毫秒参数 ))
(i++每次循环+1,i--每次循环-1)
好懒~~不想说~~~
 楼主| 发表于 2022-1-22 21:01:45 | 显示全部楼层
1.按键抖动(5-10ms),消抖(delay延时),
一个led按键亮灭
(1 高电频 不亮 松开
   0 低电频 亮 按下)
void Delay1ms (unsigned int xms)
{
    unsigned char i, j;
    while(xms)
    {
       i = 2;
       j = 239;
      do
      {
            while  (--j);
       }    while  (--i);
       xms--;
    }
}
voide main ( )
{
    whlie (1)
    {
             if(P3_1==0)
             {
                   Delay(20);//按下消抖
                   while(P3_1==0);
                   Delay(20);//松手消抖

                   P2_0=~P2_0;//亮灭取反
             }
    }
}

2.独立按键控制led移位
#include <REGX52.H>
   
unsigned char LEDNum;

voide main ( )
{
    whlie (1)
    {
             P2=0x01;
             if(P3_1==0)
             {
                   Delay(20);
                   while(P3_1==0);//while的{ }可省略
                   Delay(20);

                   LEDNum++;
                   if(LEDNum>=8)
                         LEDNum=0;//if语句里只有一句,大括号可以不写,但要缩进
                   P2=~(0x01<<LEDNum);
             }

             if(P3_0==0)
             {
                   Delay(20);
                   while(P3_0==0);
                   Delay(20);

                   if(LEDNum==0)
                           LEDNum=7;
                   else
                         LEDNum--;
                   P2=~(0x01<<LEDNum);
            }
    }
}

void Delay1ms (unsigned int xms);
{
    unsigned char i, j;
    while(xms)
    {
       i = 2;
       j = 239;
      do
      {
            while  (--j);
       }    while  (--i);
       xms--;
    }
}
好懒~~不想说~~~
 楼主| 发表于 2022-1-22 22:38:27 | 显示全部楼层
1.数码管
共阴极连接:led的阴极连接到一个端口上
共阳极链接:led的阳极连接到一个端口上
共阴极点亮:公共端接地,亮的对应端口接高电频

2.数组:把相同类型的一系列数据统一编制到某一组别中
定义:
int x[3];//定义一组变量(3个)
int x[ ]={1,2,3};//定义一组变量并初始化([ ]中也可以写3)
引用:
x[0]//引用数组第0个变量
x[1]//引用数组第1个变量


点亮数码管
#include <REGX52.H>

Unsigned char NixieTable [ ] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}//0,1,2,3,4,5,6,7,8,9
void Delay (unsigned int xms)
{
    unsigned char i, j;
    while(xms--)
    {
         i = 2;
         j = 239;
        do
        {
               while  (--j);
        }    while  (--i);
    }
}
void Nixietube (unsigned char Location,Number)
{
      switch(Location)
      {
              case 1: P2_4=12_3=12_2=1;break;//第一个数码管对应led7
              case 2: P2_4=12_3=12_2=0;break;
              case 3: P2_4=12_3=02_2=1;break;
              case 4: P2_4=12_3=02_2=0;break;
              case 5: P2_4=02_3=12_2=1;break;
              case 6: P2_4=0;P2_3=1;P2_2=0;break;
              case 7: P2_4=0;P2_3=0;P2_2=1;break;
              case 8: P2_4=0;P2_3=0;P2_2=0;break;
      }
      P0=NixieTable [Numble];
      Delay(1);
P0=0x00;//清零
}

Void main ( )
{
     While (1)
     {
        Nixietube (1,1);//第1个数码管显示1
        Delay(500);
        Nixietube (2,2);
        Delay(500);     
Nixietube (3,3);
Delay(500)
     }
}
好懒~~不想说~~~
 楼主| 发表于 2022-1-22 22:44:36 | 显示全部楼层
电气2107成豫扬 发表于 2022-1-22 21:01
1.按键抖动(5-10ms),消抖(delay延时),
一个led按键亮灭
(1 高电频 不亮 松开

void Delay1ms (unsigned int xms)
这里应该把1ms删了,但是编译的时候没有提醒错误
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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