数码之家

 找回密码
 立即注册
搜索
查看: 1010|回复: 2

[C51] 我也做个板子解决淘汰共享干衣架实现倒计时(STC15W408AS)

[复制链接]
发表于 2025-1-3 16:49:08 | 显示全部楼层 |阅读模式
在论坛里看到坛友的文章5毛单片机解决淘汰共享干衣架实现倒计时(FT61FC43)
https://www.mydigit.cn/forum.php?mod=viewthread&tid=483741&fromuid=1329198
(出处: 数码之家)
感觉出差买一个烘干衣架也不错,FMD的单片机没有玩过,就利用手头现有的STC15W408AS单片机重新打板子做了一个
https://oshwhub.com/zhousz2000/gan-yi-ji

板子选用1mm厚度的,除了单片机和HT7133其他都是从原来的板子上搬过来的

控制口既可以接原来电路也可以接STC编程器在线编程

程序写的比较简单,1,2,3,键分别对小时、十分钟、分钟加1,按住4再按1就开始工作,工作过程中按住4再按2就强制停止工作,设定时间时按住4再按3就清零可以重新设置
下面写点关于单边6脚4个8字数码管驱动程序,这种数码管任意两个脚之间正反各接了一个LED,一共是6*5=30个,每个8字用7个LED,加上中间冒号两个,正好30个。显示的时候每次将其中一个管脚拉低,另外5个管脚根据需要显示的情况设置管脚状态,点亮的管脚设置为强推挽模式高电平,不亮的管脚设置为高阻状态。
  1. BYTE Loop = 0;                                                                                                                                                                                                                                                        //中断中循环设定输出管脚
  2. BYTE Light = 0;                                                                                                                                                                                                                                                        //控制显示亮度
  3. void timer0_int(void) interrupt 1
  4. {
  5.         TF0 = 0;                                                                                                                                                                                                                                                                        //清除TF0标志
  6.         if(Light == 0)                                                                                                                                                                                                                                                //每10次开始的时候进行设定操作
  7.         {
  8.                 if(ShowLed_SIGN)                                                                                                                                                                                                                                //如果显示标志为1,显示数码信息
  9.                 {
  10.                         P1 |= 0xFC;                                                                                                                                                                                                                                                        //首先拉高所有管脚,关闭全部显示
  11.                         P1M1 = LineBuf[Loop] ^ 0xFC;                                                                                                                                                                                //高阻状态位是1,推挽或准双向为0,所以不显示的变成1
  12.                         P1M0 = LineBuf[Loop];                                                                                                                                                                                                                //推挽状态位是1
  13.                         P1 &= (Out_bit[Loop] ^ 0xFF);                                                                                                                                                                                //对应位管脚拉低
  14.                 }
  15.                 if(++Loop > 5)                                                                                                                                                                                                                                        //下一个拉低的管脚0-5,超出回0
  16.                         Loop = 0;
  17.         }
  18.         else if(Light == LIGHT_PWM)                                                                                                                                                                                                //达到显示亮度PWM的时长后,关闭显示
  19.         {
  20.                 P1 |= 0xFC;                                                                                                                                                                                                                                                        //首先拉高所有管脚,关闭全部显示
  21.                 P1M1 = 0;                                                                                                                                                                                                                                                                //保持所有管脚为准双向模式
  22.                 P1M0 = 0;                                                                                                                                                                                                                                                                //保持所有管脚为准双向模式
  23.         }
  24.         if(++Light > 9)                                                                                                                                                                                                                                                //10次后显示下一位
  25.                 Light = 0;
  26. }
复制代码
  1. void Show(void)
  2. {
  3.         BYTE i,j,k,cCode;
  4.        
  5.         ET0 = 0;                                                                                                                                                                                                                                                                                //关闭定时器0中断
  6.         for(i = 0;i < 6;i++)
  7.                 LineBuf[i] = Out_bit[i];                                                                                                                                                                                                        //清除线路输出缓冲区,设定对应位状态
  8.         k = 0;
  9.         for(i = 0;i < 4;i++)
  10.         {
  11.                 if(DispBuf[i] < 10)                                                                                                                                                                                                                                //小于10的数字才显示,大于等于10不显示
  12.                 {
  13.                         cCode = BCD[DispBuf[i]];                                                                                                                                                                                                //读取DipspBuf中的数字,并转换成段码
  14.                         for(j = 0;j < 7;j++)
  15.                         {
  16.                                 if(cCode & 1)                                                                                                                                                                                                                                        //如果该段码显示
  17.                                         LineBuf[Low_bit[k]] |= High_bit[k];                                                                                                                                        //相应的输出位置1
  18.                                 cCode >>= 1;                                                                                                                                                                                                                                        //向右移动1位,下一段码
  19.                                 k++;
  20.                         }
  21.                 }
  22.                 LineBuf[5] |= 96;                                                                                                                                                                                                                                        //显示中间的冒号
  23.         }
  24.         ET0 = 1;                                                                                                                                                                                                                                                                                //打开定时器0中断
  25. }
复制代码
  1. BYTE code Out_bit[6] = {4,8,16,32,64,128};                                                                                                                                                        //对应输出的位
  2. BYTE code BCD[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};                                //数码0-9对应数码显示

  3. //下面是28个段码对应低位管脚和高位掩码,显示该段码时,在相应的低位管脚拉低时,对应的高位推挽输出高电平
  4. BYTE code Low_bit[] = {0,0,5,5,0,0,0,3,3,1,3,3,3,1,4,4,4,1,1,1,4,2,2,2,4,2,2,5};
  5. BYTE code High_bit[] = {32,64,16,4,8,16,128,64,128,16,4,8,16,4,8,16,4,32,64,128,32,64,4,128,128,8,32,8};
复制代码
这里是这个数码管相应的一些数据。


本帖子中包含更多资源

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

x
发表于 2025-1-3 17:58:01 | 显示全部楼层
连烘干衣架

都有共享的了!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-20 09:04 , Processed in 0.405600 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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