找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1531|回复: 2
收起左侧

某人需求的 用单片机来制作充电桩改造的程序

[复制链接]
ID:276663 发表于 2021-12-29 17:53 | 显示全部楼层 |阅读模式
本帖最后由 IdeaMing 于 2021-12-30 09:26 编辑

应该很简单,51单片机连接8个按键,io口大佬看心情写,高低电平随意。
这8个按键分别控制7个io口输出,io口随意,高低电平随意。
要求就是1-7号按键分别控制1-7号io口输出,按一下按键延时6小时后恢复,在这6小时期间再次按下重新计时,7路互不干扰,一一对应。
8号按键用来中断所有io口输出。
用来制作充电桩改造的。
我来回答

单片机源程序如下:
  1. /** 使用stc15w408as单片机 sop20脚
  2.     P3接按键,可以接8个,P1口控制继电器,低电平是关闭
  3.     关闭按键 接在复位脚 哈哈哈   */
  4. #include "stc15.h"
  5. #define BASE6HOUR (6*60*60*1000)///6小时倒计时
  6. unsigned long CountTab[8] = {0,0,0,0,0,0,0,0};//倒计时
  7. unsigned short time_ms;

  8. void Delay(unsigned short t)
  9. {
  10.   time_ms = t;
  11.   while(time_ms);
  12. }

  13. void Timer0Init(void)                //1毫秒@11.0592MHz
  14. {
  15.         AUXR |= 0x80;                //定时器时钟1T模式
  16.         TMOD &= 0xF0;                //设置定时器模式
  17.         TL0 = 0xCD;                //设置定时初始值
  18.         TH0 = 0xD4;                //设置定时初始值
  19.         TF0 = 0;                //清除TF0标志
  20.         TR0 = 1;                //定时器0开始计时
  21. }

  22. void IO_Init(void)
  23. {
  24.   P0M1 = 0x00;
  25.   P0M0 = 0xff;
  26.   P3M0 = 0x00;
  27.   P3M1 = 0x00;
  28.   P1 = 0;
  29. }

  30. void main(void)
  31. {  
  32.   unsigned char res;
  33.   unsigned char key;
  34.   unsigned char i;
  35.   
  36.   Timer0Init();
  37.   IO_Init();
  38.   EA = 1;

  39.   while(1)
  40.   {
  41.     res = P3;
  42.     if(res != 0XFF)
  43.     {
  44.       key = res;
  45.       Delay(20);//消抖
  46.       key = P3;
  47.       if(res == key)
  48.       {      
  49.               EA = 0;//临界保护
  50.         for(i=0; i<8; i++)
  51.         {
  52.           if((res&0x01)== 0)
  53.           {
  54.             P1 |= (0x01<<i);
  55.             CountTab[i] = BASE6HOUR;
  56.           }
  57.           res >>= 1;
  58.         }      
  59.         EA = 1;
  60.       }
  61.     }        
  62.   }
  63. }

  64. void tm0_isr() interrupt 1
  65. {
  66.   unsigned char i;

  67.   if(time_ms)time_ms--;
  68.   for(i=0; i<8; i++)
  69.   {
  70.     if(CountTab[i])
  71.     {
  72.       CountTab[i]--;
  73.       if(CountTab[i] == 0)
  74.       {
  75.         P1 &= ~(0x01<<i);
  76.       }
  77.     }
  78.   }
  79. }
复制代码


stc15.h头文件:http://www.51hei.com/bbs/dpj-117121-1.html

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:397211 发表于 2021-12-30 07:55 | 显示全部楼层
这个东西做子很简单啊,要想实现效果好的话最好是加一个时钟模块,用定时器的话时间久了不准
回复

使用道具 举报

ID:276663 发表于 2021-12-30 09:27 | 显示全部楼层
保持微笑 发表于 2021-12-30 07:55
这个东西做子很简单啊,要想实现效果好的话最好是加一个时钟模块,用定时器的话时间久了不准

不就是简单才写个玩吗,复杂的话,怎么滴也得收个费吧。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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