数码之家

 找回密码
 立即注册
搜索
查看: 3358|回复: 13

[STM] 仿制一个51黑论坛凌净清河的一个OLED3231时钟基于stm8s103

[复制链接]
发表于 2020-2-2 06:56:40 来自手机浏览器 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
工作忙没有时间(10h*30d*12m)工作方式…再加上懒癌很多东西都是拖拖拉拉…各种各样的烂尾…终于被强制性的休息了…除夕那两天给撸出来了…调时按键还是没有弄出来…@ganbc 加上你的按键程序老是编译不过去…凑合凑合先用了…基于stm8s103…比51好用很多的片子,压力,电压,温度,时间,日期,可玩性比较高…差不多一年没有玩了打算这段时间好好的再折腾一下…程序在51黑…
_486488994_1580018339977_1580018339000_xg_0.jpg
发表于 2020-2-2 12:58:12 | 显示全部楼层
本帖最后由 慕名而来 于 2020-2-2 13:29 编辑

其实玩时钟,按键部分占的比重不小,下面说说我的思路(程序在我以前的帖子里都有贴过),菜鸟编程漏洞很多希望编程的高手指点。
关于按键部分涉及以下这些:
1.正常走时显示函数:
例如:OLED0.96屏&RX8025
  1. //====时间显示函数==================================
  2. void dasply_time()
  3. {
  4.     read_8025time(&time);                        //读取实时时间time

  5.     PutGB8_16(1,0,9,HEX_D(time[6])/10);
  6.     PutGB8_16(1,0,17,HEX_D(time[6])%10);        //显示年
  7.     PutGB16_16(1,0,25,"年");
  8.     PutGB8_16(1,0,45,HEX_D(time[5])/10);
  9.     PutGB8_16(1,0,53,HEX_D(time[5])%10);        //显示月
  10.     PutGB16_16(1,0,65,"月");
  11.     PutGB8_16(1,0,85,HEX_D(time[4])/10);
  12.     PutGB8_16(1,0,93,HEX_D(time[4])%10);        //显示日
  13.     PutGB16_16(1,0,105,"日");
  14.     PutGB16_32(1,2,16,HEX_D(time[2])/10);
  15.     PutGB16_32(1,2,32,HEX_D(time[2])%10);        //显示时
  16.     PutGB16_32(1,2,80,HEX_D(time[1])/10);
  17.     PutGB16_32(1,2,96,HEX_D(time[1])%10);        //显示分
  18.     PutGB16_16(1,6,90,"周");
  19.     set_week();                                                                                //显示星期
  20. }
复制代码


2.调整数据显示函数:根据选择按键的键值r调整相关项
  1. <p>//====时间调整显示函数===============================
  2. void set_time(uchar c)
  3. {</p><p> switch(c)
  4.     {
  5.     case 0x01:
  6.     {
  7.         time[6]=read_8025(0x06);//读年
  8.         PutGB8_16(0,0,9,HEX_D(time[6])/10);
  9.         PutGB8_16(0,0,17,HEX_D(time[6])%10);        //显示年
  10.         PutGB16_16(1,0,25,"年");
  11.         Adjustment(time[6],6);//调整年
  12.     }
  13.     break;
  14.     case 0x02:
  15.     {
  16.         time[5]=read_8025(0x05);//读月
  17.         PutGB8_16(0,0,45,HEX_D(time[5])/10);
  18.         PutGB8_16(0,0,53,HEX_D(time[5])%10);        //显示月
  19.         PutGB16_16(1,0,65,"月");
  20.         Adjustment(time[5],5);//调整月
  21.     }
  22.     break;
  23.     case 0x03:
  24.     {
  25.         time[4]=read_8025(0x04);//读日
  26.         PutGB8_16(0,0,85,HEX_D(time[4])/10);
  27.         PutGB8_16(0,0,93,HEX_D(time[4])%10);        //显示日
  28.         PutGB16_16(1,0,105,"日");
  29.         Adjustment(time[4],4);//调整日
  30.     }
  31.     break;
  32.     case 0x04:
  33.     {
  34.         time[2]=read_8025(0x02);//读时
  35.         PutGB16_32(0,2,16,HEX_D(time[2])/10);
  36.         PutGB16_32(0,2,32,HEX_D(time[2])%10);        //显示时
  37.         Adjustment(time[2],2);//调整时
  38.     }
  39.     break;
  40.     case 0x05:
  41.     {
  42.         time[1]=read_8025(0x01);//读分
  43.         PutGB16_32(0,2,80,HEX_D(time[1])/10);
  44.         PutGB16_32(0,2,96,HEX_D(time[1])%10);        //显示分
  45.         Adjustment(time[1],1);//调整分
  46.     }
  47.     break;
  48.     }
  49.     write_8025(0x00,0x00);        //秒归0开始运行
  50. }</p>
复制代码


3.配合调整显示函数还要用到数据范围限制函数:
  1. //-------时间数据调节范围设定函数---------------------
  2. //仅调整1-分、2-时、3-星期、4-日、5-月、6-年、共6个数据
  3. uchar data_range(signed char date,uchar i)//定义有符号变量适应数值<0的判断
  4. {
  5.     switch(i)
  6.     {
  7.     case 0x01:        {
  8.         if(date>59) date=0;
  9.         if(date<0) date=59;
  10.     }
  11.     break;
  12.     case 0x02:        {
  13.         if(date>23) date=0;
  14.         if(date<0) date=23;
  15.     }
  16.     break;
  17.     case 0x03:        {
  18.         if(date>06) date=0;
  19.         if(date<0) date=06;
  20.     }
  21.     break;
  22.     case 0x04:        {
  23.         if(date>31) date=1;
  24.         if(date<1) date=31;
  25.     }
  26.     break;
  27.     case 0x05:        {
  28.         if(date>12) date=1;
  29.         if(date<1) date=12;
  30.     }
  31.     break;
  32.     case 0x06:        {
  33.         if(date>99) date=19;
  34.         if(date<19) date=99;
  35.     }
  36.     break;
  37.     }
  38.     return(date);
  39. }
复制代码


4.调整项选择按键函数:返回键值r

  1. //------设置按键函数--------------------------------

  2. uchar Choice_set()
  3. {
  4. if(N1==0) //选择键
  5. {
  6. Delay_1ms(25);
  7. if(N1==0)
  8. {
  9. r++;
  10. if(r>5)
  11. {
  12. r=0;
  13. }
  14. while(!N1);
  15. }
  16. }
  17. return(r);
  18. }
复制代码


加减按键函数:
  1. //-------按键加减调整函数---------------------------------
  2. void Adjustment(signed char da,uchar i)//定义有符号变量适应数值<0的判断
  3. {
  4.     signed char dat;
  5.     dat=HEX_D(da);
  6.     if(N2==0)
  7.     {
  8.         Delay_1ms(25);
  9.         if(N2==0)
  10.         {   //如果按动上调键
  11.             dat++;                                                               //数字加
  12.             dat=data_range(dat,i);
  13.             while(!N2);
  14.         }
  15.     }
  16.     if(N3 == 0)
  17.     {
  18.         Delay_1ms(25);
  19.         if(N3 == 0)
  20.         {   //如果按动下调键
  21.             dat--;                                                               //数字减
  22.             dat=data_range(dat,i);
  23.             while(!N3);
  24.         }
  25.     }
  26.     write_8025(i,D_HEX(dat));
  27. }
复制代码


这些函数通过主函数调用的方法是:先设一个公共变量r
void main(void)
{
******
******
    r = 0;//初始化这个变量
    while(1)
    {

//程序开始就调用这个按键选择函数查看变量r的状态
        Choice_set();

//接下来根据r的状态来选择需要运行的函数
        if(r != 0)   //调整键按下时进入调时状态
        {

//如果r的状态有变化则执行调试模式
           set_time(r); //调用调试函数

//进入set_time()函数后将r值赋值给    switch(c)中的c,再根据c显示需要调整项的数据
//例如:c=1则执行下面这段代码:
//case 0x01:{time[6]=read_8025(0x06);//读年  PutGB8_16(0,0,9,HEX_D(time[6])/10);******}
//此函数在调整数据时又要调用数据范围限制函数来控制数据的变化范围
        }
//如果r=0没有变化或者已经调试完成被清零了就执行正常的走时函数
        else if(r == 0)  //走时
       dasply_time();
       }
}



打赏

参与人数 1家元 +10 收起 理由
家睦 + 10

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-2 13:24:30 | 显示全部楼层
51黑论坛抄袭成风
回复 支持 反对

使用道具 举报

发表于 2020-2-2 13:33:22 | 显示全部楼层
ysh711 发表于 2020-2-2 13:24
51黑论坛抄袭成风

抄、改、写或许是业余玩家的必经之路吧。
回复 支持 反对

使用道具 举报

发表于 2020-2-2 13:38:40 | 显示全部楼层
慕名而来 发表于 2020-2-2 13:33
抄、改、写或许是业余玩家的必经之路吧。

是原封不动,一字不差地抄袭当成自己的,我的好几个原创帖子被剽窃过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:20:32 来自手机浏览器 | 显示全部楼层
ysh711 发表于 2020-2-2 13:38
是原封不动,一字不差地抄袭当成自己的,我的好几个原创帖子被剽窃过。 ...

从来都没有这样干过,可以借鉴可以仿制…不能据为己有…引用说明出处…不合适就删掉…所以说程序都不传…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-2 15:24:45 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2020-2-2 12:58
其实玩时钟,按键部分占的比重不小,下面说说我的思路(程序在我以前的帖子里都有贴过),菜鸟编程漏洞很多 ...

感谢老哥热心回复,今天调试Dht11大半天出来的数据都是鬼…没有逻辑分析仪…时序属于盲人摸象…等“春暖花开”时撸个逻辑分析仪回来再折腾这玩意儿…按键今晚再弄,脑子快成浆糊了放松一下…时隔一年没怎么好好玩都在忙着赚钱养家糊口(前年听老哥一席话感触颇深),也就这段时间才“难得”有时间玩这些东西……
回复 支持 反对

使用道具 举报

发表于 2020-2-3 10:01:11 | 显示全部楼层
触景情伤 发表于 2020-2-2 15:24
感谢老哥热心回复,今天调试Dht11大半天出来的数据都是鬼…没有逻辑分析仪…时序属于盲人摸象…等“春暖 ...

现在都在家不敢出去,有点爱玩的东西也算是万幸了,趁机玩玩也好,逻辑分析仪应该有(便宜的就好)但是也不能寄太大希望,我经常情形下是看到波形而不明就里,按照波形分析时序也是挺不好弄的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-3 10:12:37 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2020-2-3 10:01
现在都在家不敢出去,有点爱玩的东西也算是万幸了,趁机玩玩也好,逻辑分析仪应该有(便宜的就好)但是也 ...

关键是现在我连IO翻转的延时多少都搞不清楚…时钟频率分频影响很大…
回复 支持 反对

使用道具 举报

发表于 2020-2-3 10:23:26 | 显示全部楼层
ysh711 发表于 2020-2-2 13:38
是原封不动,一字不差地抄袭当成自己的,我的好几个原创帖子被剽窃过。 ...

没有办法的,当年百度空间里我有好多文章被转载也是不打招呼的,我的图片被录入产品手册也没说法,习惯了就好了。
下图就是我在2012年5月5日百度空间发表文章的配图,虽然原理不是我原创的,但图真的是我画的,只能呵呵了。
444.jpg

回复 支持 反对

使用道具 举报

发表于 2020-2-4 09:49:23 | 显示全部楼层
按键程序之前已经贴出很简单的啊,以为你早弄出来了呢。我的没有用到DTH11,只用3231里的测温。
回复 支持 反对

使用道具 举报

发表于 2020-2-4 09:52:50 | 显示全部楼层
慕名而来 发表于 2020-2-2 12:58
其实玩时钟,按键部分占的比重不小,下面说说我的思路(程序在我以前的帖子里都有贴过),菜鸟编程漏洞很多 ...

STM8S要显示汉字可能存储空间不足。它仅有8KB的空间,所以写程序要省着点。
回复 支持 反对

使用道具 举报

发表于 2020-2-4 18:50:03 | 显示全部楼层
ganbc 发表于 2020-2-4 09:52
STM8S要显示汉字可能存储空间不足。它仅有8KB的空间,所以写程序要省着点。 ...

多谢指点,我用STC12W408AS也是8K的,如果需要显示的文字多可以外挂W25Q**。
88888.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 01:52:59 来自手机浏览器 | 显示全部楼层
ganbc 发表于 2020-2-4 09:49
按键程序之前已经贴出很简单的啊,以为你早弄出来了呢。我的没有用到DTH11,只用3231里的测温。 ...

没…编译了半天过不去…凑合着能用3231好像也挺靠谱的,也懒得弄了…这两天发现这玩意儿好像有点程序跑飞的现象…开关电源有时候屏幕会罢工,按复位键也不行…不知道是不是屏幕坏了,明天用屏幕初始化程序试试看看到底是不是屏幕的问题,我也没有Dht11啊,那个是180气压传感器模块
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 05:56 , Processed in 0.093600 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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