资讯详情

LED流水灯

思路:

用于测试发光二极管是否正常工作和学习

点亮二极管,见前文

1.P0 P2 P3 设置为推拉输出,然后将其设置为推拉输出P2 P三置一,使二极管发光。

然后再对P0赋值可以点亮相应的对应值led灯

要实现流水灯,可以点亮一盏led灯 等一会儿 熄灭它,同时点亮下一个led灯 如此循环

推挽输出:

一对选择性地使用一对连接负载灌电流或拉电流 该装置的电路通常使用一对参数相同的功率三极管或MOSFET管道在电路的方式存在于电路中

当电路工作时,两个对称的开关管每次只有一个导管,因此导管损耗小,效率高。输出不仅可以向负载灌注电流,还可以向负载提取电流。推拉输出不仅提高了电路的负载能力,而且提高了开关速度。

推挽输出常见的是图腾式输出

图腾式输出

常用于数字电路,因为TTL与非门采用两种垂直堆叠的同类晶体管,中间采用钳式二极管隔开

关键代码设计

void Init()

只要初始设置发光二极管电路,P0和P2\3工作模式设置为推拉输出,同时设置P2\3置1使二极管发光 其中对P0\P设置2的工作模式可以设置相应的工作模式P0口模式配置寄存器P2模式配置寄存器 

void Init(){

P0M1=0x00; P0M0=0xff;  P2M1=0x00; P2M0=0x08;  led_sel=1;  

} void delay_ms(unit n) 延迟函数也可以存在STC-ISP指定延迟时间的延迟函数代码通过软件延迟计算器功能自动生成,如下: 在这里插入图片描述

延迟n毫秒的功能,但延迟时间可能不太准确。 单片机在统一的时钟脉冲控制下工作,由单片机控制器中的时钟电路产生 时钟电路由振荡器和分频器组成,产生基本的振荡信号,然后进行分频,得到相应的时钟。 内部振荡和外部振荡通常有两种方式 我们使用的单片机内部集成高精度R/C内部振荡器或外部晶体振荡器可用于工作时钟 外部振荡信号通过内部时钟电路和分频获得相应的时钟信号 

各种周期

振荡周期:晶体振荡器周期

状态周期/时钟周期:振荡信号经二分频后形成的时钟脉冲信号,用S表示,两个振荡周期称为节拍1和节拍2

节拍1用于算术逻辑操作 节拍2通常在内部寄存器之间传输

机器周期:完成一个基本操作所需的时间称为机器周期。一个机器周期包括6个时钟周期,用S1-6表示;依次使用共12个节拍S1P1,S1P2,S2P1,S2P2……表示

指令周期:CPU执行指令所需的时间,CPU执行指令是在时钟脉冲控制下进行的。由于指令的功能和长度不同,指令执行所需的时间也不同。指令周期通常包含1-4个机器周期

举例

例:若MCS-单片机外部晶振为1251MHz单片机四个周期的具体值为:

振荡周期=1/12MHz=1/12μs=0.0833μs

时钟周期=1/6μs=0.167μs

机器周期=1μs

指令周期=1~4μs

单片机晶体振荡器M的频率可以是4MHz~48MHz典型值为11.0592MHz(因为使用此频率的晶振可以准确获得9600bits/s和19200bits/s的波特率) 根据指令执行时间计算1ms可以相应执行多少条指令,函数中可通过循环执行空指令来达到延时1ms的效果。

main()

每个程序都是从main首先,调用Init初始化电路,然后循环P0进行赋值,点亮流水灯 
void main()  {    Init();    /*初始设置发光二极管电路,   只要把P0和P2\工作模式设置为推挽输出,   同时把P2\3置1,能使二极管发光*/    led=0x01.//从第一盏灯开始    while(1)    {         P0=led;        //点亮第一盏灯         delay_ms(200); //延时200ms                  if(led==0x80)  ///从头开始亮灯             led=0x01;         else             led=led<<1;  //左移一位    }     }   # 总代码 #include<STC15F2K60S2.H> #define uchar unsigned char #define uint unsigned int sbit led_sel=P2^3;//P2^3----E3 uchar led;  void Init(){   P0M1=0x00;  P0M0=0xff;   P2M1=0x00;  P2M0=0x08;   led_sel=1;  }     void Delay100ms()  //@11.0592MHz {  unsigned char i, j, k;  // _nop_();  //_nop_();  i = 5;  j = 52;  k = 195;  do  {   do   {    while (--k);   } while (--j);  } while (--i); }  void main() {  Init();   led=0x01; // P0=led; while(1)  {   P0=led;  // delay_ms(200);   Delay100ms(); //?óê±200ms    if(led==0x80)    led=0x01;   else    led=led<<1;  }    }   

除了不懂推挽设置,其他都不错,很好! 6.28补充 左右移动的流水灯(乒乓球比赛基础)

void main() {  Init();   led=0x80;  while(1)  { while(1)  {   P0=led;   Delay100ms(); //?óê±100ms    if(led==0x01)   {   break;   }   led=led>>1;  } while(1) {    P0=led;   Delay100ms(); //?óê±100ms    if(led==0x80)   {   break;   }   led=led<<1; } } } 

标签: ms类型晶体管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台