原来在这里打卡学习 实验箱已收到!
本帖最后由 ysp5318 于 2024-10-29 08:57 编辑学习冲哥《32位8051单片机原理及应用》有一段时间了。
第一集的重点是认识单片机,以及怎样学习单片机。
第二集是了解单片机认识实现各种功能的部件等第三集重点是如何创建一个工程,搭建C251的开发环境。
第四集这集以及前面一集和8位机部分差不多比较好理解。第五集C语言运算符和进制数深入浅出的讲解听起觉得压力不是很大。不知道要在这里学习,打卡。那就从现在开始从头学习,温故知新也是必须的。
本帖最后由 ysp5318 于 2024-10-10 10:54 编辑
今天学习第6集《LED闪烁和花式点灯》。重点是用Delay函数,实现LED的闪烁。Delay函数使用的地方很多,我有一个电动窗项目就需要通过供电5秒实现窗子的开关,就用到Delay函数。但问题是正如老师所讲的它会一直死在那里,影响其他程序的运行。期待老师的解决方法。
《LED闪烁和花式点灯》下集 解读了函数问题。使我才系统的了解到函数使用的三步骤:定义,声明,调用。以前用其然,不知其所以然,谢谢老师的讲解。
这集中创建新文件使用模块化编程,对以后编程帮助很大,使其清晰,简洁,方便修改调用。 这几天在学习第7集《按键点灯》上下。这里又用到Delay函数,首先解决了按键抖动的问题,然后通过短按,长按又可以实现不同目的。这集还讲解了移位和数组的定义,使用以及注意事项。老师说掌握以上知识就算入门了。恐怕没这么简单吧,继续学习争取真正入门。
昨天开始学第8集《蜂鸣器的应用》,这集跟我的应用项目《电动窗》比较相似。就是用单片机的P2口控制继电器,实现电动机的正反转的转换和电源的开关。下面是模仿老师的程序写的程序代码,编译正常。但还没上机测试,不知能否正常运行。
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define KEY1 P32 //定义一个按键 引脚选择P32
#define KEY2 P33 //定义一个按键 引脚选择P33
#define MAIN_Fosc 24000000UL //定义主时钟
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
sbitZh = P2^0; //电源正负极转换开关
sbitSc = P2^1; //电源输出开关
sbitDC = P2^2; // 备用电源开关
bit TGSS = 0;//窗户开关状态标志 0= 窗户关
//------------------------------函数声明-----------------------
void YPTG_SC(); //推杆伸出 开窗户
void YPTG_FH(); //推杆返回关窗户
void sys_init(); //系统初始化
void delay_ms(u16 ms); //unsigned int
void main() //程序开始运行的入口
{
sys_init(); //USB功能+IO口初始化
usb_init(); //usb库初始化
EA = 1; //CPU开放中断,打开总中断。
while(1) //死循环
{
if( DeviceState != DEVSTATE_CONFIGURED ) //
continue;
if( bUsbOutReady )
{
usb_OUT_done();
}
//-----------------------KEY1按下开窗户-----------------------------------------------
if( KEY1 == 0) //判断按键有没有按下
{
delay_ms(10);
if( KEY1 == 0 )
{
printf("按键P32已经按下\r\n");
YPTG_SC(); //推杆伸出开窗户
}
}
//-----------------------KEY1按下关窗户-----------------------------------------------
if( KEY2 == 0) //判断按键有没有按下
{
delay_ms(10);
if( KEY2 == 0 )
{
printf("按键P33已经按下\r\n");
YPTG_FH(); //推杆返回关窗户
}
}
}
}
void YPTG_FH() //推杆返回关窗户
{
Zh = 0; //电源正负极转换开关 关
Sc = 1; //输出开关 开
delay_ms(10000); //输出开关 开延时10秒
Zh = 0; //转换开关 关
Sc = 0; //输出开关 关
TGSS = 0; //窗户已关
DC = 0; // 备用电源断开
}
//========================================================================
void YPTG_SC() //推杆伸出 开窗户
{
Zh = 1; //转换开关 开
Sc = 1; //输出开关 开
delay_ms(10000); //输出开关 开延时10秒
Zh = 0; //转换开关 关
Sc = 0; //输出开关 关
TGSS = 1; //窗户已开
DC = 1; // 备用电源连通
}
void sys_init() //函数定义
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
P2 = 0x00; //设置P2口开机后全部为低电平
P3M0 &= ~0x03;
P3M1 |= 0x03;
//设置USB使用的时钟源
IRC48MCR = 0x80; //使能内部48M高速IRC
while (!(IRC48MCR & 0x01));//等待时钟稳定
USBCLK = 0x00; //使用CDC功能需要使用这两行,HID功能禁用这两行。
USBCON = 0x90;
}
void delay_ms(u16 ms) //unsigned int
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
这段代码中开机就把 P2口全部设为0,这样能行吗。{:4_196:} 今天学习第9和第10集《数码管的静态和动态显示》数码管静态显示实际上就是用7个LED灯显示数字笔画加一个LED灯显示小数点。学会通过数组获取数值是重点。数码管的动态显示,则需要增加一个位数组,利用动画效果实现多位数码管的显示。掌握控制好延时的时间,是正常显示必须的。顺便问一下,用积分换芯片多长时间发货?我的屠龙刀坏了急需芯片更换。 今天很开心,积分换芯片的宝贝收到了,屠龙刀更换芯片后恢复了活力。
马上开始学习11集《定时器的使用》。使用定时器可以替代长时间的delay,能及时的响应某个事件,提高CPU的运行效率和处理速度。
通过学习我们知道了,要使用定时器需先设置功能为定时器,再设置不分频或者12分频的工作模式,然后对定时器控制器(TCON)设置,和定义中断函数,之后起动定时器和中断。
下一步准备使用定时器解决我前面提到的《电动窗》开关窗delay时,能响应其他发生的事件。 本帖最后由 阮平 于 2024-10-17 14:00 编辑
{:5_332:}
继续学习,今天是12集《计数器的使用》用这个宝贝测速,计数在自动化控制上非常重要。
计数器的设置这节课和上节课的内容不同点主要是功能设定为计数器,然后把输入信号的端口的上拉要选上。
实际应用中发现测速会同时运用定时和计数的功能。通过学习这一集可以做一个转速仪,用来测电机的转速。 本帖最后由 ysp5318 于 2024-10-18 16:41 编辑
前几天学第8集《蜂鸣器的应用》时,模仿老师的程序写了个《电动窗》的程序代码,编译正常。上机测试也没有问题。这两天学习定时器,计数器。在此程序上增加了定时器中断程序,实现了在开关窗的延时过程中,P24每秒都能正常闪烁一下。本想发个视频由于格式不对发不了。以后再发吧。
今天开始学习《简易多任务处理》这集分成上、中、下、终4部分,内容比较多需要慢慢消化。
昨天开始学习《简易多任务处理》这一节课开始,重点是要理清程序的逻辑思路。应用模块化的编程(.c
+ .h)来规范程序,使程序符合工程师级别的代码规范。工程中创建程序文件有三步一新建文件xxx.c
和xxx.h,并保存,二添加到工程,三添加引用路径。 一般把引脚定义都写在.h文件中...等。
这集冲哥按照函数定义三步从定义、声明到调用全面的讲解了如何创建一个多任务的工程。其中穿插讲解
了判断语句if,for循环语句等的用法。尤其是详细的讲解用状态机的方法读取按键,使人耳目一新。通过这集
的学习,使我们在以后的工程项目中程序文件逻辑更清晰、明了,再上了一个新的台阶。