找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: wolfinn
打印 上一主题 下一主题
收起左侧

单片机C语言程序奇怪的问题,我没有考虑到什么?

[复制链接]
41#
ID:776619 发表于 2022-6-4 15:35 | 只看该作者
我之所以对我的数据源不怀疑,是用头脑跟着运算到那条语句的当下那一瞬间,是很确定的情况,第一,我虽开着串口中断,但没接线。别的中断在那当下也没有发生,要不我会怀疑什么中断堆栈之类的问题。
回复

使用道具 举报

42#
ID:824490 发表于 2022-6-4 16:13 | 只看该作者
其实一开始就是逻辑的问题:
1、开机读取1302的分钟值,存为变量比如“”
2、过一段时间(这个时间影响定时的实时性,最多不要超1分钟),如2秒一次,读1302分钟值,与“START”对比,相同则跳过,不同则计时变量如“MIN” +1,同时把1032分钟值赋予“START”。
3、"MIN">=5,则继电器动作切换。
要什么取模转换?要什么串口打印?都不用管它。。只不过多加了个变量而已。
回复

使用道具 举报

43#
ID:776619 发表于 2022-6-4 16:23 | 只看该作者
zhxiufan 发表于 2022-6-4 14:38
关键的问题是当,分值大于49时,被赋予了值为0,当然就会出问题了。所以要分别处理大于49和小于49的情况。

不用分别处理,经模转换后可以排除影响。
回复

使用道具 举报

44#
ID:824490 发表于 2022-6-4 20:06 | 只看该作者

...............;
unsigned char gds1302_time[7];                               //1302时钟数组
............;

u8  newmin;
u8  min_count;

sbit  wifi_power=P1^5;                                         //继电器
..........;
main()
{
.........;
.........;
ds1302_read_time();                                                       //读入1302时间值,放数组gds1302_time里,[1]里的是分钟。
newmin=gds1302_time[1]; //分钟转为数值,此变量为开机分钟初始值
min_count=0;
wifi_power=0;                                                                //打开继电器,wifi通电。
...................;
...................;
while (1) //如果这个大循环时间超长(大于1分钟,则需另开一个定时器,用中断法)
    {
      ..........;
      .........;
     if(wifi_power=0)  //wifi通电时,才读入时间值,防止一直读取分钟数

       ds1302_read_time();

        if (gds1302_time[1]!=newmin) //比较分钟值
                {                                                                              
                 min_count++;  //不同则表示已改变分钟数,计数+1

                 newmin=gds1302_time[1]; //同时改变已存的分钟值

                 }

    if (min_count>=5) wifi_power=1;      //计数溢出(超5分钟)则wifi断电
                                                         
       }         
     ..................;
     .................;
     }

}
回复

使用道具 举报

45#
ID:883242 发表于 2022-6-4 23:16 | 只看该作者
传说中三个臭皮匠赛过诸葛亮,但是这个帖子告诉我们一个臭皮匠能气死三个诸葛亮。
回复

使用道具 举报

46#
ID:776619 发表于 2022-6-5 00:33 | 只看该作者
名字不是重点 发表于 2022-6-4 16:13
其实一开始就是逻辑的问题:
1、开机读取1302的分钟值,存为变量比如“”
2、过一段时间(这个时间影响定 ...

是,你这方法同上一位高手的异曲同工,只是变了种写法。今天傍晚前我差不多也想到了一致的内容,刚看你的回复。用串口是另一朋友为了让我排除故障提出来的一个方法。但我一直没有进行。是因为我左边值一开始就是一个无类型的值。串口输出要怎么处理,要说它是64位的值我都可以转换打印得出来。不同右边初值是一个字任型的变量。而我是无法去打印出那俩个系统为了运行>比较而自动转换的值的。你们的算法都很妙。其实现在我把左值在判断前先把它赋给一个确定类型的变量可能就好了。现在看来在编程当中不能有一个不确定的东西。我还没有试。我是一切都怀疑,而不是那朋友所说的质疑我的数据源,好象什么刺痛我的神经。为的是看起来可以的东西为什么不行。防止下回再犯同样的错误。虽然说算法有点笨和慢。但能用的话同样能解决问题的。
回复

使用道具 举报

47#
ID:776619 发表于 2022-6-5 00:40 | 只看该作者
以前我调试程序是点亮一盏灯来看看程序走到哪里,有没有进条件语句。现在看来打印输出更方便。可以根据内容设无数个点。
回复

使用道具 举报

48#
ID:161164 发表于 2022-6-5 00:56 | 只看该作者
wolfinn 发表于 2022-6-4 13:29
好吧,谢谢你,左边是一个现算值,右边一个算好的变量值,数据乱入?不想吵了,谢谢你,浪费了你的时间。

如你所说左边是现算值,右边是算好的变量值
if(A>B)要成立必定是A的值大于B
既然B是固定值
必然是A在一分多钟内突然多于B(如255)
那么有没有一个可能
就是ds1302_read_time();这函数在读取分钟值时受到中断或其他因素干扰
令读到的值产生错误(如255)
于是if(A>B)就成立了
188610329的if((gds1302_time[1] < 0x60) && ((gds1302_time[1] & 0x0f)< 0x0A))
就是为了过滤这种掉数据乱入
而串口输出更可以得知A的值甚至A的源数据gds1302_time[1]的值
从你的回覆得知你还没有试过打印出来
而是认定了过了一分多钟gds1302_time[1]的值只会+1或+2

还有就是为什么不把所有代码都贴上来?
而是只"节录"你觉得有问题的代码片段?
在你之前的三个发问贴中
第一个贴子没有代码,范范而谈,结果是定时器0初始化语句放WHILE(1)大循环里
第二个贴子有代码,但原来是用错晶振
第三个贴子有"节录"代码,结果是函数宣告打少了*号
在第一个贴子中更说出"不放程序上来不是让人来解决问题的。那样我觉得学不到东西。对别人也是种折磨。"这名句
敢问你在第一个贴子里学到了什么?
回复

使用道具 举报

49#
ID:776619 发表于 2022-6-5 00:58 | 只看该作者
名字不是重点 发表于 2022-6-4 16:13
其实一开始就是逻辑的问题:
1、开机读取1302的分钟值,存为变量比如“”
2、过一段时间(这个时间影响定 ...

又想了一下,你这方法虽说可以,但是没有开关量,因为这只要开机运行一次,还得加一开关量。
回复

使用道具 举报

50#
ID:776619 发表于 2022-6-5 06:34 | 只看该作者
lkc8210 发表于 2022-6-5 00:56
如你所说左边是现算值,右边是算好的变量值
if(A>B)要成立必定是A的值大于B
既然B是固定值

分析得有道理,别的代码没必要放出来。
我误解了,仔细看你所的加条语句是解决乱入问题的。
你说的我的第一贴我说不贴代码,本来我是把贴子放51单片机里的,没把它放24小时里。是管理员把它挪来。只是想所我遇到过这奇怪的现象。第一贴可以说是学到了写代码在什么位置都会有影响。
第二贴是没想到晶振对串口影响那么大,板载的是多少的没标志,后来在别的地方找了个对上。
三贴可以说是为了解决问题临时在程序里打的*,而在函数说明里没打。至今不懂指针。那是用指针乱打最后把问题解决了。可以说我所有的贴子本来都只是个标题就行,只说自己遇到个现象。
还有这贴子也经管理员改过了,本来我是先写代码进来,后才说明 现象的,是管理员把它换过来先说现象,后还补了句代码如下的。可以说我是多么的不严谨。
代码乱入,不是不会有,因为我这程序里 有个数组用得比较大,处理串口程序时12864第二行就会乱闪。处理完就不闪了。之所以没考虑同样是串口程序也同样这问题,是因为串口没线,Wifi模块没用,,仅接个接触器。
回复

使用道具 举报

51#
ID:776619 发表于 2022-6-5 06:52 | 只看该作者
lkc8210 发表于 2022-6-5 00:56
如你所说左边是现算值,右边是算好的变量值
if(A>B)要成立必定是A的值大于B
既然B是固定值

"
wolfinn 发表于 2022-6-4 13:29
好吧,谢谢你,左边是一个现算值,右边一个算好的变量值,数据乱入?不想吵了,谢谢你,浪费了你的时间。

如你所说左边是现算值,右边是算好的变量值
if(A>B)要成立必定是A的值大于B
既然B是固定值
必然是A在一分多钟内突然多于B(如255)
那么有没有一个可能
就是ds1302_read_time();这函数在读取分钟值时受到中断或其他因素干扰"

突然多于B,表现为不稳定,如果是乱入,也是一个固定的乱入。
好吧,都见笑了,本来都是个标题贴,以后不发了。自己学习。
回复

使用道具 举报

52#
ID:161164 发表于 2022-6-5 11:18 | 只看该作者
wolfinn 发表于 2022-6-5 06:34
分析得有道理,别的代码没必要放出来。
我误解了,仔细看你所的加条语句是解决乱入问题的。
你说的我的 ...

对不起~误会了你
想不到管X员还会删代码
回复

使用道具 举报

53#
ID:624769 发表于 2022-6-5 14:37 | 只看该作者
wolfinn 发表于 2022-6-4 13:29
好吧,谢谢你,左边是一个现算值,右边一个算好的变量值,数据乱入?不想吵了,谢谢你,浪费了你的时间。

本不打算再回复此帖,正好路过,也不打算再帮你分析了,就给你指条路,

DS1302  时常读出   0xff      这几个关键字,你可以百度一下。

多了也没力气说,想要进步就自己好好分析一下, 0xff 是不是一定大于你右边任意值,要是还是故步自封,那也是你自己的事了。就像我回复另一个帖子说的,这个论坛提问的都是爷爷,您爱怎样就怎样吧。
回复

使用道具 举报

54#
ID:776619 发表于 2022-6-5 15:33 | 只看该作者
188610329 发表于 2022-6-5 14:37
本不打算再回复此帖,正好路过,也不打算再帮你分析了,就给你指条路,

DS1302  时常读出   0xff      ...

谢谢你,本来就是水贴,本来也没想在什么24小时必答版放的,既然管理员把我第一个贴放那里了,也就多放了几个。
       虽说从未想水过那贴,但如查写,也是“单片机会打斗地主?总是给我显示黑桃2、红桃3........"
乱入不是没有,但我同时也在显示屏上看着的,也可能眼睛没那么快。
回复

使用道具 举报

55#
ID:776619 发表于 2022-6-5 15:38 | 只看该作者
188610329 发表于 2022-6-5 14:37
本不打算再回复此帖,正好路过,也不打算再帮你分析了,就给你指条路,

DS1302  时常读出   0xff      ...

照这么说,最高明的那俩朋友的方法也不可靠了,不同就加1,也会定时不准。
回复

使用道具 举报

56#
ID:64283 发表于 2022-6-5 22:30 | 只看该作者
WIFI中有个叫看门狗的设置,你需要在程序中,时常去喂狗,就不会出现你说的情况了
回复

使用道具 举报

57#
ID:776619 发表于 2022-6-6 15:44 | 只看该作者
lkc8210 发表于 2022-6-5 11:18
对不起~误会了你
想不到管X员还会删代码

我说的是我先写代码,然后再写现象,管理员发现我表述顺序不好,然后把我写的现象改到了前面,,然后替我写了句代码如下。我并没有说管理员删了我的代码。我的贴一直都想说我遇到了什么现象,最后能够解决的话写上解决方法,无论是我引起的问题,好让别人看到后“哦,原来这样。”就行。如不是为了表述方便我连代码都不贴。没有人这世界上会要24小时毕答我的。
回复

使用道具 举报

58#
ID:776619 发表于 2022-6-6 15:46 | 只看该作者
ephzq 发表于 2022-6-5 22:30
WIFI中有个叫看门狗的设置,你需要在程序中,时常去喂狗,就不会出现你说的情况了

没接Wifi, 仅仅是读分钟然后比较而引起的局部小问题。
回复

使用道具 举报

59#
ID:776619 发表于 2022-6-7 03:57 | 只看该作者
一直没做什么动作,刚才试了一下。
对各位的建议还是表示感谢,都会在心里过一下,虽然没有去执行一下,心里觉得有那可能,但不太象。
其实搞好了可以用DS1302长时间定时的,会举一反三的人可能会知道,有时不太想说,明白的人也会明白。
用我认为最可能的,把左边的在前面一句用相同的类型变量先算出来,再入条件比较,这样避免类型不同引起的自动转换问题(其实是我的不懂,是根本没有数据类型)。这样有了类型后俩个值也可以打印输出了。
可以打印输出后发现初值为零了。经检查发现好象是被Wifi的一个函数冲击造成的。按说应该不会的,函数主要是输出一些AT指令到ESP8266,连网,获得时间数据串。因为没接串口,仅仅空发AT指令,这些不在研究问题上,自己会看看。不再表述。
把获取初值语句放wifi函数后面即可获得正确初值,后面就是while(1)大循环了。
1.最佳的情况,获取正确初值情况下,左值先运算值,基本正确。
2.在正确初值情况下,左值还是原来一样用公式算,能定时,但好象不稳。
3在初值不正确情况(为零),左值是公式还是先放变量里,在==比较右值时好象可以定时,但定时时间不确定。
因为试的各种可能试的内容比较多,有点蒙圈
如果1情况属实,将不再说明,会将贴子标题改【已解决】。
对wifi函数为什么会冲掉初值自己会看看(里面没有用到那个变量名)。
回复

使用道具 举报

60#
ID:645485 发表于 2022-6-7 23:35 | 只看该作者
Hephaestus 发表于 2022-6-4 23:16
传说中三个臭皮匠赛过诸葛亮,但是这个帖子告诉我们一个臭皮匠能气死三个诸葛亮。
原谅我不厚道的笑了!!!
回复

使用道具 举报

61#
ID:624769 发表于 2022-6-9 18:21 | 只看该作者
wolfinn 发表于 2022-6-5 15:38
照这么说,最高明的那俩朋友的方法也不可靠了,不同就加1,也会定时不准。

给你那个 判断方法,从来没说可以解决你的问题, 只是告诉你,你根本不用计算就能判断是不是过了5分钟,并且,用那个方法之后,你不到5分钟就跳出来,你就能意识到,原数据有错误,才会去着手解决数据乱入的问题。那么多人让你串口把数据发出来,都是基本确定了:你的问题就是 原数据 有问题了,唯独你不自知。
回复

使用道具 举报

62#
ID:776619 发表于 2022-6-9 23:54 | 只看该作者
188610329 发表于 2022-6-9 18:21
给你那个 判断方法,从来没说可以解决你的问题, 只是告诉你,你根本不用计算就能判断是不是过了5分钟, ...

我想说的是,既然会有数据乱入,那么假如我1分钟内循环取了10次值,正常情况下这个数是不会变的,而有了数据乱入,那就更乱了,相隔两个值乱入一次,只好象过了五分钟一样。而对于一个定时程序,1000次有一次乱入都是不允许的,就如同用在学校里打铃一样,刚上课一会又打下课铃了,这怎么行。
    我这个问题除了我所解决的数据类型不定,还有冲掉初值问题外,还有一个就是一个综合利用所引起的数据错乱问题。可能如下:1变量和数组利用过大,加上堆栈的管理,让变量的地址重叠。2.LED没有进行排忙命令处理引起的乱跳(当然这问题贴子里我没有描述)。3大量串口中断引起的故障。(其实这个和1是差不多同一个意思,只是我接不接串口线表现不同而已。)
回复

使用道具 举报

63#
ID:776619 发表于 2022-6-11 00:10 | 只看该作者
说点题外话。
我做的是一个可以显示温度的时钟。做好后没有用键盘调时的功能。
其实用串口输入也是可以进行调时的。用2022/23/05 15:32:00、2022,23,05,15,32,00、2022|??|23|05#15(32;00#等等方式都可以,用几个分隔符,用什么分隔符都不重要。只要知道时分秒等数据在第几位就行。相关的串口处理程序能很好地解析出来送入DS1302更新就可以。
高手一点的话还可以用一个查询语句AT?,单片机机收到是AT?后知道是查询时间格式输入方法。输出一句应相应的格式语句就行。再高高手的话把AT?做一下大小处理,无论是输入大写的AT,还是小写的at,还是大小写的,都认为是查询输入时间格式命令。
回复

使用道具 举报

64#
ID:776619 发表于 2022-6-11 00:31 | 只看该作者
我连串口输入调时的程序都没有做。
那么既然串口可以输入,我知道有人用GPS和WIFI也做过对时的,,也有相关的文章之类的在各论坛发表过。GPS模块输出的也是有关定位数据,时间数据,速度,方向等等信息。只要把时间信息解析出来,更新到DS1302就行。也有现成的商品卖,两面大红字显示的卖到上千元一个,也有便宜一点的。有一家只要几十块,Wifi、GPS、电波钟都有。不是为他做广告。只是说明个情况。学单片机就是玩,也不指望用它能挣到什么钱,如果要看时间,花个10来块买个电子钟,一年下来也很准时,就算差个一两分钟也没有什么感觉。
回复

使用道具 举报

65#
ID:776619 发表于 2022-6-11 00:38 | 只看该作者
网上卖的GPS模块有多种,30块钱左右有单模的,有GPS/北斗双模的,还有三模的,有接小天线的,模块上背个四方的陶瓷天线的,也有可以外接天线的。也有卖说是双模,实际上卖出来的是仅有GPS信号。不过都可以有定位时间等文字输出,只不过收星多少的问题。Wifi模块更便宜了,就是四五块的ESP8266。



回复

使用道具 举报

66#
ID:883242 发表于 2022-6-11 01:20 | 只看该作者
子曰:“朝闻道,夕死可矣。”

没有弄清楚到底是怎么回事,就轻易放弃,然后找了个“花个10来块买个电子钟”来证明追求真相是廉价的。那就是个不折不扣的懦夫。遇到挫折不是想要去克服,不是想要征服挫折,而是拿挫折的价格来说明自己懦弱是有道理的,这种人,一辈子都是懦夫。

在社会上混,一辈子都不行,反正竞争不过别人,都可以用别人买的产品才比你便宜一毛钱来解释,一毛钱就能把壮汉变成懦弱无能的制杖。
回复

使用道具 举报

67#
ID:776619 发表于 2022-6-11 01:42 | 只看该作者
先说下GPS实现方法。
拿到GPS模块,用串口助手就可以调试了。不过用这前最好把它拿到天台,用个充电宝,接上USB转TTL接口先收一阵子卫星,这样回到屋子它就可以记住最好的星链表,接收起来快点。
基本上能见天就有信号,一颗星就能有UTC标准时间输出。三到四颗星就可以定位。
通电未能定位在助手信息如下图:


每秒钟发送几行信息:


一组信息内有时间信息的行:


有具体一点年月月时间信息的行:


如果是调时间,解析有时间信息内容的哪一行的都可以,但如果要整年月日等,最好是每组内上图这一行。


下图是有具体定位信息的内容,不过51单片机功能太小,定位信息也没有地图接口可用,倒是行进方向和速度如查解析出来倒是可以做个自行车码表之类。
回复

使用道具 举报

68#
ID:776619 发表于 2022-6-11 02:03 | 只看该作者
知道个什么原理,就好办了。写相关的串口程序。
$GNZDA,152547.000,10,06,2022,00,00*4D
先检查收到的是不是"$"字符,是的话计数器清零,用计数器做下标存接收数组,再接收五个字符,看看数组内是不是接收了$GNZDA,是的话继续存入数组。不是就不管它,让串口接收程序空转。
等收到换行(0X0A),就可以关了串口中断,进行数据解析,更新DS1302了。当然,里面要做时区处理,每天的16:00:00~24:00:00(UTC),也就是北京时间0点到早上8点要做加一天处理,还有如果是月尾大小月30天31天,2月的闰年闰月2829,满年要加年之类的日期处理。如果要更精确那更多的处理。因为数据出来是最好要加1秒是比较准的,要不会慢1秒。而加1秒又要做什么满60秒分钟加1等等判断。

接口程序做好后就算没有接GPS模块,也可以用串口助手输入相应的一行字符调时,如下图。
回复

使用道具 举报

69#
ID:776619 发表于 2022-6-11 02:07 | 只看该作者
下面两图是我做的,请看第三行前面是个标志,如果正在对钟就显示一个向上箭头,如果对时完成显示一个星。

回复

使用道具 举报

70#
ID:776619 发表于 2022-6-11 02:24 | 只看该作者
本帖最后由 wolfinn 于 2022-6-11 08:14 编辑

如果一颗星信号都没有,数据帧头是一样的,但里面的时间日历没有,只有几个分隔符逗号连着,不过可以通过收到换行符后计数器的大小判断,比如大于39的为有效数据。
    解析语句搜网上资料有人用的是结构体来进行,什么结构体共同体,那东西我不懂,反正用笨笨的方法能搞出来就行。
回复

使用道具 举报

71#
ID:776619 发表于 2022-6-11 02:33 | 只看该作者
程序设计有两个内容,一个是上电对时一次。一个是每天对时一次。
真正的是每天21:59:59对时,打开相关的标志,打开串口接收程序,接收数据正确后更新DS1302,关闭标志,设置成功标志,让星星能显出来。如果有可能,关GPS模块的电。不过一般GPS室内信号比较弱,常开电反倒能保持星链组。
上电对时主要是有利于调试和第一次使用的,不可能开机不能对时,等内部时间走到22点再对时吧?
回复

使用道具 举报

72#
ID:776619 发表于 2022-6-11 02:46 | 只看该作者
有一个注意事项是程序设计下载是GPS不能接着,要不程序下载不成功到单片机内。
回复

使用道具 举报

73#
ID:776619 发表于 2022-6-11 02:50 | 只看该作者
再说下Wifi模块对时原理吧。
下面两图是我的时钟用wifi对时未成功和成功的图,就是标志换了下。

回复

使用道具 举报

74#
ID:776619 发表于 2022-6-11 03:47 | 只看该作者
本帖最后由 wolfinn 于 2022-6-11 11:54 编辑

wifi对时我想了两周才弄出来。
Wifi对时和GPS对时原理一样,就是通过一串骚操作,得到一串串口有时间日期信息的字符去处理。但又有点不同,GPS是被动方式,它不用做什么,总能在串口得到数据。而Wifi模块对时要连上家里的路由器,发出几个AT命令,才得到有关数据。
有个网址在电脑上浏览器内打上,得到的数据是最完美的,但是我一直在模块上弄不出来。
后来我在相关内容的贴子里看到有人说随便连上个网站,然后随便输入,出错信息里就有时间数据。开始我也没做出来。因为有些网站他是不会有相关回应的。
好了,拿到wifi模块,我用的是ESP-01S,别的ESP 8266可能也一样可以的吧。先用USB转TTL接口调试。
接上家里的宽带及密码,重新上电确认它能自动连家里的Wifi,用AT查分配有IP及网关掩码等内容。
输入以下AT命令:
AT+CIPSTART="TCP","www.网址.com",80
AT+CIPMODE=1
AT+CIPSEND
然后就会出现个>号,然后在后面随便输入点东西,就会有一大堆东西跳出来,里面就有UTC时间消息。

数据接收就是>后面的一堆东西,可以从换行符(隐藏的,显示不出来的0X0A)收到换行符后计数器清零,接着收到的四个字符是Date的话就计数继续存数据。直到换行符出现,再根据换行符时的计数值判断数据的有效性。要不是Date的话就只接收,空转不存,直到遇到换行符再看后面四个字符是不是Date。
解析数据就同GPS对时的一样了,就是数据帧头不同,位置知道了数据也就能弄出来。
   也是每天22点对时一次,也是上电对时一次,以利于调试和第一次使用。
回复

使用道具 举报

75#
ID:776619 发表于 2022-6-11 03:57 | 只看该作者
调试程序花了点时间,因为用助手时不用考虑延时的,而程序中每句AT命令要有1秒左右的延时。同时助手是自动加入回车换行,程序口也必须加上。
选用网址我用的是央视网,连上网站后在>号后我打入的是123然后回车,所以如果有人上央视网如果有点卡顿,可能是我的时钟正在上网对时。这也是句笑话,花不了什么时间的,网站服务器并发量大得很。
回复

使用道具 举报

76#
ID:776619 发表于 2022-6-11 04:13 | 只看该作者
本帖最后由 wolfinn 于 2022-6-11 04:16 编辑

对于连上一个网站,它会多久脱网不知道。
另外ESP8266透传方式退出有时会不是很好地退出。当然可以用语句来判断它是不是退出了透传方式,但还是会有退不出的现象,那么下一次对时就不能进行了,时间可以走,向上箭头总是显示。
   为了解决这个问题,最好的方式是断电,在正常情况下,对时完成,也可以关继电器,这个做到是没有问题的。就怕是某一天家里网络出故障连不上网,对时也就无从说起。
   所以就想到了一开机,或者是每天22点打开串口接收后,不管它收不收到正确的对时数据,都在5分钟后关Wifi模块,说什么节能那是戏说。
  当然罗,定时的方式多种多样,我的LED第四行显示的就是格言名言,两句话的切换就是最简单的计数定时,在大循环里计一个数,等于一个值时就切换显示第二句,再到另一个值时计数清零再切换显示第一句。
回复

使用道具 举报

77#
ID:776619 发表于 2022-6-11 04:23 | 只看该作者
本帖最后由 wolfinn 于 2022-6-11 05:03 编辑

串口一大堆信息内容,真正有用的就是有时间那一句,收到那一句后的换行符后数据有效的话就关串口接收程序,后面的内容不收了。
回复

使用道具 举报

78#
ID:776619 发表于 2022-6-11 22:23 | 只看该作者
学习单片机,最大的是满足感,学会了显示图片,就想到了做个片头来套进自己的作品内。甚至连转场也放一个图片,运行后发现卡死了,该有的东西它也不见了。查了查,发现程序编译后的空间已经大过8K。同时虽说用CODE可以把图片内容限定在ROM空间,节省宝贵的内存资源,但运行起来刷新奇慢。只能取消这屁颠颠的兴趣,真的要用,也用文字来显示版权公司等信息。
回复

使用道具 举报

79#
ID:776619 发表于 2022-6-11 22:30 | 只看该作者
上传共享个C语言教程文件吧,某专业网站一点点扣下来的,里面可能会有该网站的信息,不知管理员会不会放行。现在这个论坛对这些太严了,有时放个网址来讨论都被删改。说淘东西只能某一个宝或马云家。

C 语言教程_20220512133830.pdf

1.64 MB, 下载次数: 5

C语言教程

回复

使用道具 举报

80#
ID:776619 发表于 2022-6-13 12:00 | 只看该作者
今天看到51单片机有个PCON电源管理寄存器,里面的GF1、GF0是可以让人自由使用的,这样就可以把它们做为俩个Flage标志变量,程序设计中就可以少用俩个变量,节省资源了。还有单片机的低功耗和掉电模式也值得学习,用好了可以实现节能和有趣味的功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表