粤嵌单片机兴趣课(四)
前言
本次实验所用单片机为C51单片机
,CPU
为AT89C52
,使用的开发软件是Keil uVision4
,将程序下载到单片机所使用的软件为stc-isp-15xx-v6.85H.exe
。
注意事项
(1)如果需要创建工程并添加文件和学习如何向单片机烧入可执行程序,请参考博客https://blog.csdn.net/APPDREAMER/article/details/115568852
,本篇博客不在做相关赘述。
(2)由于实验结果需要上传视频,因此没有将相关实验结果图片放置于博客中。
(3)具体学习所有过程请参考博客粤嵌单片机兴趣课(一)~(六)。
(注:链接如下:粤嵌单片机兴趣课(一))
(注:链接如下:粤嵌单片机兴趣课(二))
(注:链接如下:粤嵌单片机兴趣课(三))
(注:链接如下:粤嵌单片机兴趣课(五))
(注:链接如下:粤嵌单片机兴趣课(六))
(4)在进行C51单片机之电机马达驱动车运动实验的时候烧入源代码以后,如果轮子不转动,记得将两个轮子转动一下。
C51单片机之电机马达驱动车运动实验
1、实验原理。
(注:电机使轮子A转动的原理)
(注:电机使轮子B转动的原理)
(注:小车向右前方前进的原理)
(注:电机驱动模块与C51单片机和电机连接原理)
2、利用杜邦线将C51单片机和电机驱动模块连接起来。(注:连接成功图示如下)
3、点击File->New
创建一个新文档。
4、在文档中书写如下程序。
(注:程序代码如下)
#include<reg52.h>
sbit a1 = P0^0;
sbit a2 = P0^1;
sbit b1 = P0^2;
sbit b2 = P0^3;
void Delay50ms();
void Delay5ms();
void ahead();
void left();
void right();
void leftahead();
void rightahead();
void Delay25ms();
//延时函数,延时25ms
void Delay25ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 2;
j = 13;
k = 237;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//延时函数,延时50ms
void Delay50ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//延时函数,延时5ms
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
//前进
void ahead()
{
a1=0;
a2=1;
b1=1;
b2=0;
}
//原地左转
void left()
{
a1=0;
a2=0;
b1=1;
b2=0;
}
//原地右转
void right()
{
a1=0;
a2=1;
b1=0;
b2=0;
}
//后退
void goback()
{
a1=1;
a2=0;
b1=0;
b2=1;
}
//左前方前进(右轮全速,左轮差速前进)
void leftahead()
{
b1=0;
b2=1;
a1=1;
while(1)
{
a2=0;
Delay25ms();
a2=1;
Delay25ms();
}
}
//右前方前进
void rightahead()
{
a1=0;
a2=1;
b1=1;
while(1)
{
b2=0;
Delay25ms();
b2=1;
Delay25ms();
}
}
int main()
{
//ahead();
//goback();
//left();
//right();
//leftahead();
rightahead();
return 0;
}
3、在如图所示界面点击下载编程
,然后按下单片机上的蓝色按钮即可成功下载到,观察小车的轮子转动的实现即可。(注:成功将程序烧入到单片机界面如下)
C51单片机中断之定时器中断
1、定时器中断问题及其描述。
2、定时器输入频率以及定时设置。
3、C51单片机定时器及其配置逻辑。
4、设置定时器开关以及输入频率。
5、定时器的配置。
(注:定时器配置代码如下)
//定时器
void Timer0Init(void) //50毫秒@11.0592MHz
{
EA = 1;//打开中断总开关
ET0 = 1;//打开定时器中断0开关
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
C51单片机流水灯程序之定时器中断实验
1、点击File->New
创建一个新文档。
2、在文档中书写如下程序。
(注:程序代码如下)
#include<reg52.h>
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
sbit FM=P0^7 ;
unsigned char TIME_BASE=0;
//延时函,延时1毫秒
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//定时器
void Timer0Init(void) //50毫秒@11.0592MHz
{
EA = 1;//打开中断总开关
ET0 = 1;//打开定时器中断0开关
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
//中断服务函数
void func() interrupt 1
{
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TIME_BASE++;
if(TIME_BASE==40)
{
TIME_BASE=0;
FM=~FM;
}
}
int main()
{
Timer0Init();
while(1)
{
P1=0x7F;
Delay1000ms();
P1=0xBF;
Delay1000ms();
P1=0xDF;
Delay1000ms();
P1=0xEF;
Delay1000ms();
P1=0xF7;
Delay1000ms();
P1=0xFB;
Delay1000ms();
P1=0xFD;
Delay1000ms();
P1=0xFE;
Delay1000ms();
}
}
3、在如图所示界面点击下载编程
,然后按下单片机上的蓝色按钮即可成功下载到,观察单片机上LED的实现即可。(注:成功将程序烧入到单片机界面如下)