xiaoxia9623
发表于 2025-2-18 13:12:36
按照冲哥讲的,括号需要对齐,应该这样写才行:
void main()
{
Timer0_Init();// 初始化定时器0
EA = 1; // 使能总中断
while (1)
{
if (Key == 0) // 检测按键是否按下
{
while (Key == 0);// 等待按键释放
if (timer0_running)
{
TR0 = 0;// 停止定时器0
timer0_count = 0;// 清零计数
TR0 = 1;// 重新启动定时器0
}
else {
TR0 = 1;// 启动定时器0
timer0_running = 1;
}
}
}
}
大括号不成对出现并且对齐容易丢,虽然我不会给弄丢,但是真的不好看,看起来不舒服,那么就听冲哥的,成对对齐。
xiaoxia9623
发表于 2025-2-18 13:52:44
xiaoxia9623 发表于 2025-2-18 13:12
按照冲哥讲的,括号需要对齐,应该这样写才行:
void main()
注意:以上代码并没有设定单片机时钟频率,STC8H1K08单片机的定时器0有多种工作模式,假设其工作在16位定时器模式下,定时器0的寄存器TH0和TL0分别为高8位和低8位。当TH0和TL0都写0时,定时器从0x0000开始计数,到0xFFFF溢出,共计2^{16}=65536个数。单片机主频率通常还要经过12分频后作为定时器的计数脉冲源,
若f_{osc}=12MHz,则溢出时间T=\frac{65536\times12}{12\times10^{6}}s = 65.536ms。
由此(“if (timer0_count >= 72 * 3600 * 1000)// 72小时(假设1ms中断一次)”式子中1000可设为20,并通过设定定时器初值,使定时器溢出时间为50ms.或者通过设定初值使定时器溢出时间为1ms,这样,式子中的1000就不用修改。)
xiaoxia9623
发表于 2025-2-18 21:57:46
第十二集讲定时器做计数器使用,以前经常听别人这样讲课,其实这样讲是不准确的,定时器跟计数器本来就一个东西,只是做了不同的用途而已,它们的本质仅仅是加一计数器。做定时器使用时,就是每加一消耗的时间累积起来,就形成了长的时间,作为计数器使用时,不计算它的时间,只累积外部脉冲的个数,时间是一个一个的加的,脉冲的个数也是一个一个的加起来的。不过定时器一般会加载一定的初值,一般计数器不会这样用。多数时候是从零开始累加。如图,冲哥讲的非常的清晰,首先是把C/T置1,这样就打开了计数器的开关,同时也就关闭了定时器,然后是采集T1-pin这个单片机外部引脚的脉冲个数,并累加。就是计数器啦{:4_174:}
xiaoxia9623
发表于 2025-2-18 22:14:38
第12节里面,既然设为准 双向口了,就是弱上拉了——为什么还要去打开上拉电阻呢?不是已经打开了吗?{:4_168:}不明白为什么啊?端口为准 双向模式是,默认就是高电平啊!~!
又额外再r打开一个阻值小的上拉电阻干嘛啊,官方的事例代码中也打开了上拉电阻,那是因为设为了仅输入,怕干扰啊,准 双向口,再去打开这个电阻,没有用处啊
xiaoxia9623
发表于 2025-2-18 22:50:17
这一节的事例不太恰当,计数器你去计数啊,计一个数,去中断,哪如用外部中断呢,或者查询引脚状态,或置标志位,让它取反呢。写个OXFF,一个脉冲就溢出了。{:4_167:}{:4_186:}冲哥这里只是给我们讲一下它的用法,现实中不会有这种用法的,刚上来一看,有点檬,不过一会就明白了……只是为了观查一个灯亮的现象吧。再一个就是,没有现成的脉冲发生器吧。
xiaoxia9623
发表于 2025-2-18 23:03:12
官方的事例代码是这样的啊,P3M1=0X70;P3M0=0X40;这个时候P35 P34怕外部干扰。
xiaoxia9623
发表于 2025-2-18 23:31:53
xiaoxia9623 发表于 2025-2-18 22:50
这一节的事例不太恰当,计数器你去计数啊,计一个数,去中断,哪如用外部中断呢,或者查询引脚状态,或置标 ...
接着往下看,噢,后面的事例就是计数了哦1{:aixin:}
xiaoxia9623
发表于 2025-2-18 23:46:23
Show_Tab = Count_T1/1000;
Show_Tab = Count_T1/100%10;
Show_Tab = Count_T1/10%10;
Show_Tab = Count_T1%10;
数码管显示的时候为什么要求模再求余
Show_Tab = Count_T1/1000%10;
Show_Tab = Count_T1/100%10;
Show_Tab = Count_T1/10%10;
Show_Tab = Count_T1/1%10;
其实以前都是这样写的:
Show_Tab = Count_T1/1000;
Show_Tab = Count_T1%1000/100; Show_Tab = Count_T1%100/10; Show_Tab = Count_T1%10;
xiaoxia9623
发表于 2025-2-19 13:01:50
第十三集分为四个小节,主要是讲了建立自己的头文件,把各个功能模块放在不同的文件夹里,在这个文件夹里一般在放一个.C文件和一个.H文件,本功能 模块的.C文件和主文件必须需要引用 本功能模块的.H文件,在本功能模块的.H文件中需要声明函数和变量,如果变量只是在本功能模块的.C文件中用到,那么只需要在本功能模块的.C文件中声明即可,如果在其它函数中也需要用到这个变量,需要在变量前面加上extern,另外,在哪一个功能模块中,需要用到哪个头文件中一定义,那么这个功能模块的头文件中,还必须引用 哪一个头文件。
xiaoxia9623
发表于 2025-2-19 13:48:13
第十四集讲的是矩阵按键,跟AI8051U中的矩阵按键 讲的是一样的。刚开始看到这个图的时候,我好一会没有明白是怎么一回事,为什么要接两个电阻到VCC,后来才想清楚,可能板子上面就是 这样接的吧,这个图是跟据板子上面的接法画的,其实单纯就矩阵按键来讲,这两个电阻是没有用处的,不过IO口附的电阻,需要都给接上保险一些。