zhange
发表于 2024-5-11 12:51:56
第七集:按键点灯上
1.系统时钟老师一直喜欢使用24兆的,我喜欢软件默认的11.0592兆hz的,不用设置,我对速度也没啥要求,这已经嘎嘎快了,系统时钟和延时和后边的计时器用的时候频率一定要对号,一直用那个就用那个。
2.多引用不会报错,但少引用不行,多次引用,以最后一次为准。
3.把按键当成开关来理解。
4.按键属于机械开关,会有抖动。可以做下按键消抖10-20ms。
if(key == 0)
{
delay(10);
if(key == 0)
{
//这里写代码
}
}5.为了方便程序的移植,按键啥的最好做个中间变量例如
#definekey1 P33
#definekey2 P34
后期换按键了只需改动以上代码即可。
zhange
发表于 2024-5-11 13:45:38
第七集:按键点灯下
1.一键开关灯
P10 = ~P10
2.按键按下灯左移,注意教程这里是灌电流,0才是点灯;
老师教的P1 = (P1<<1 + 1),然后加个判断if(P1 == 0xff)P1 = 0xfe;
发散一下:可以加个按键次数标志位,给P1赋值,也可以使用11111111 异或 0000 0001(这个数左移)他俩运算值就是点灯的位数
如果是1是点灯可以用下边的左移。
P1 = (P1<<1);
3.数组:int i; 数组就是相同类型的数据的集合?定义的时候可以一下赋值,引用的时候一个一个引用i,i。
c语言中字符串和字符数组有区别,待了解。
zhange
发表于 2024-5-11 16:41:18
第八集:蜂鸣器的应用
1.蜂鸣器分有源和无源,有源的通电就可以响,无源的需要高低电平变化,目前只接触了有源蜂鸣器。无源待了解。。。
2.课程中蜂鸣器原理和led一样,三极管控制。
3.老师给发的案例里边引用:#include "COMM/usb.h" 可以改为#include "usb.h" 需要添加引用文件 COMM
4.感觉老是!的讲法讲错了,不管几个位都可以用!吧。而且!不是取反的,是非。
5.按键跑马灯代码纯手敲。。。。。。。仅供参考
if(key == 0)
{
delay(10);
if(key == 0)
{
deng++;
P1 = ~(1<<deng);
if(deng >8)
{
deng = 1;
}
}
}
zhange
发表于 2024-5-11 16:56:43
第八集:作业
1.老师这十年大神有时候都出错,我这小白出错正常了,不慌,慢慢来。
2.在程序里==表示等于 =表示赋值
3.学会使用模式切换标志位。
4.理清思路,再写代码。
zhange
发表于 2024-5-11 18:40:32
本帖最后由 zhange 于 2024-5-12 06:08 编辑
第九集:数码管的静态使用
1.数码管我熟呀,刚烧了一个,不知道熟了没,反正不能吃了。
2.自己玩数码管切记要串电阻分压,5v电压,串个400-500欧姆就可以了。
3.单片机上一般用共阳的吧???
4. abcdefgh 共阳0是亮。1是灭。共阴相反。低位在后高位在前。
5.
电子爱好者2024
发表于 2024-5-11 20:45:27
加油
zhange
发表于 2024-5-12 07:10:12
第十集:数码管的动态显示
1.动态显示原理,人眼有辉光暂留现象,大概在20ms左右,自己控制时间,以不闪烁为主。
2.段码控制显示的数字,位码控制那位显示。
3.因为小数点是最高位,所以要想显示小数点可以或上0x80(这个是经验呀,有的人就喜欢或)。也可以自己在数组里重新设置一边数值。
4.重复使用的代码,最好是做成函数,减小程序大小,显得简洁。
5.老师这里其实没有用到计时器或延时器,只是用的系统指令来加,不准。。TimCount++;
//段码可以分给P0位码分给P1注意对号
unsigned char SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //0-9段码,0-9带小数点
unsigned char COM_Tab = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe }; //0-7的位码数组
unsigned char Show_Tab = {3,0,0,0,0,10,0,0};
看见电阻没都是经验。。。。{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}
zhange
发表于 2024-5-12 07:45:32
本帖最后由 zhange 于 2024-5-12 09:11 编辑
第十一集:定时器的使用
1.注意这里并不是1毫秒变量+1,系统指令运行也需要时间,指令运行时间和频率有关。老师全程都没讲系统频率?建议想了解的可以百度下。。。。。
2.定时器主要掌握t0 16位自动重装模式。生成代码主要靠isp软件,直接设置好就行。这里有坑,多设置几次就明白了。
3.代码
void Timer0_Init(void) //100毫秒@6.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xB0; //设置定时初始值
TH0 = 0x3C; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
4.时钟:单片机中的CPU和其它模块都是通过单片机的时钟进行同步工作的,一个时钟单位只能做一个事情。时钟周期(单片机主频)影响了单片机的速度。主频越高性能越高,一般PC的主频都是2G多3G多,51单片机的主频MHz级别。一般手机CPU的主频也在1G-2G左右。
5.12zhz 注意这里的单位都是秒 1秒为12000000下 1个周期时间也就为1/12000000 如果为12分频 也就是12个周期计数加1 加一下的时间也就为1/1000 000 也就为1us 如果我们定时1毫秒那么需要定时器加1000次 也就是65536-1000=6553616进制表示为0xfc18利用科学计算器换算如下图
看一下软件里的计算
完全正确哈哈把高低位分开就是了
zhange
发表于 2024-5-12 09:55:37
本帖最后由 zhange 于 2024-5-12 14:04 编辑
第十二集:计数器的使用
1.定时器0其实也是计数器0.
2.脑海里突然飘过高速脉冲计数器??我去学的plc知识都忘了,学了一定要用呀。不用早晚还给老师。。。冲哥助我。。。。
3.计数器主要应该是捕获外部脉冲的吧,并不是叫你做按钮计数的。
4.上拉电阻是干嘛的?看了下视频也没看很明白接着学吧
5.电机测速,老师计算脉冲数用的16位 unsigned int(编程语言和计算机体系结构中,int类型可能占用更少或更多的字节数。例如,一些嵌入式系统或特定的编程语言可能将int类型设置为2个字节(16位),以节省内存空间。)但其实c语言中他是占4个字节的。
6.要学习的东西还有很多:编码器,步进电机??????慢慢来吧。。。
科学妞妞
发表于 2024-5-12 10:06:18
zhange 发表于 2024-5-12 07:45
第十一集:定时器的使用
催更