单片机C51Day2-流水灯和样片申请

    科技2024-01-20  88

    流水灯设计、蜂鸣器、继电器

    1.如何申请免费样片

    (很多大公司都有)(以美信为例) 第一步:输入公司网址 出来的网页是英文的,如果要将网页内容改成中文可点击右上角的简体中文 第二步:点击申请样品(画红线部分) (以时钟芯片DS12CR887为例)该如何申请指定想要的芯片

    此页面往下翻阅 之后直接点击提交便可 其他公司方法相似

    2.Day1课后练习

    题1:尝试让第一个发光管闪烁(这就涉及到了时间延迟问题,可用while语句进行循环致使延时) (为防止出乱最好在程序外围加一个大循环while(1){}) (若要将程序停在某一行就可用while(1);)

    #include<reg52.h> sbit p1_1=P1^0; unsigned int a; void main() { while(1) { a=50000; p1_1=0; while(a--); a=50000; p1_1=1; while(a--); } }

    调节时间的时候需要将软件模拟时钟周期与单片机晶振周期相匹配,及为11.0592MHz(每个实验板各不相同) 查看时钟停留时间(如图所示)(改变a的值可以控制闪烁停留时长)

    3.简单的时间延时

    4.子程序的调用

    #include<reg52.h> #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit D1=P1^0; void delay();//子函数的声明 void main() { while(1) { D1=0; delay(); D1=1; delay(); } } void delay() { uint x,y; for(x=100;x>0;x--) for(y=2000;y>0;y--); }

    延迟时间就是这样子微调出来的(此方法适用于大概的时间延迟,若要精确延迟需要使用晶振可精确到1微妙,此方法后续会讲) (500ms如图所示)

    5.带参数子程序的设计

    刚好延迟时间为10ms的程序

    #include<reg52.h> #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit D1=P1^0; //void delay();//子函数的声明 void delay(uint z);//z可写可不写如有其他参数用逗号隔开 void main() { while(1) { D1=0; delay(10); D1=1; delay(10); } } /* void delay() { uint x,y; for(x=100;x>0;x--) for(y=2000;y>0;y--); }*/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=120;y>0;y--); }

    程序延迟时间如图所示:

    6.C51库函数的方便调用

    以流水灯为例
    打开C语言库函数例如_crol_循环左移函数(_cror_循环右移) uchar temp;//全局变量,赋值时变量的类型要和被赋值变量类型一样,P1口是一个8位的寄存器,unchar正好是一个8位的无符号,如果定义成int就出错了 #include<reg52.h> #include<intrins.h>//crol(循环左移)函数的头文件 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 uchar temp;//全局变量 void delay(uint z);//z可写可不写如有其他参数用逗号隔开 void main() { temp=0xfe;//第一个灯亮 P1=temp; while(1) { temp=_crol_(temp,1);//使temp循环左移一位 delay(600); P1=temp; } } void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); }

    方法二、可通过位运算,与和或的关系来计算哪个灯亮

    如何驱动蜂鸣器

    蜂鸣器原理图如下(蜂鸣器内阻非常小几乎就是一小段线圈):

    FM对应CPU的P2.3口:控制蜂鸣器响还是灭。b极给个低电平就响,高电平就不响;

    sbit beep=P2^3;//控制蜂鸣器 beep=0; //打开蜂鸣器

    如何驱动继电器

    Processed: 0.010, SQL: 8