流水灯设计、蜂鸣器、继电器
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; //打开蜂鸣器