数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3138|回复: 9

[C51] 大神帮增加一下按键和定时的程序

[复制链接]
发表于 2019-6-13 22:43:30 | 显示全部楼层 |阅读模式
500家元
现在程序是上电默认开机并运行了的,但想增加一些功能
增加:上电默认不开机,长按键KEY约2秒再开机,并运行SRL(),短按切换到SR(),只要是短按就来回切换,但任何状态下长按开与关机
          启动后,运行1小时自动关机
  1. #include "stc15w.h"                       
  2. #include <intrins.H>                      //函数运算头文件
  3. #define uint unsigned int                 //宏定义变量0-6553
  4. #define uchar unsigned char               //宏定义变量0-255
  5. #define     MAIN_Fosc       11059200L     //定义主时钟

  6. /*定义ADC参数*/

  7. #define ADC_POWER   0x80                //ADC power control dit (宏定义ADC电源控制位)1000 0000
  8. #define ADC_FLAG    0x10                //ADC complete flag (宏定义ADC完成标志位)    0001 0000
  9. #define ADC_START   0x08                //ADC start control dit (宏定义ADC启动控制位)0000 1000
  10. #define ADC_SPEEDLL 0x00                //420 clocks (宏定义420时钟)速度控制         0000 0000
  11. #define ADC_SPEEDL  0x20                //280 clocks (宏定义280时钟)速度控制         0001 0000
  12. #define ADC_SPEEDH  0x40                //140 clocks (宏定义140时钟)速度控制         0010 0000
  13. #define ADC_SPEEDHH 0x60                //070 clocks (宏定义70时钟)速度控制          0011 0000
  14. /*定义接口*/
  15. sbit out=P1^1;                          //驱动端口定义
  16. sbit key = P2^4;                        //定义KEY接口
  17. sbit ledL = P4^2;                       //定义低档位接口
  18. sbit ledH = P4^3;                       //定义高档位接口
  19. void InitADC();                         //初始化ADC子程序声明
  20. uchar zhADC(uchar ch);                  //ADC 转换子程序声明
  21. void delayms(uint k);                   //1ms延时子程序声明
  22. void SR();                              //执行AD转换结果子程序声明H
  23. void SRL();                             //执行AD转换结果子程序声明L
  24. uchar n = 0;                            //按键初始化

  25. /*接口模式初始化*/
  26. void port_mode()                        
  27. {
  28.    P2M1=0x00; P2M0=0x00;                // P2 P4灯和按键端口模式, 准双向口0x00
  29.    P4M1=0x00; P4M0=0x00;
  30.    P1M1 = 0x01;                         //P1.0高阻 P1.1强推挽:0000 0001 ADC输入高阻、继电器强上拉
  31.    P1M0 = 0x02;                         //P1.0高阻 P1.1强推挽:0000 0010 ADC输入高阻、继电器强上拉
  32.    out=0;                               //驱动初始化0
  33. }

  34. /*void delay()                           //延时函数1
  35. {
  36.   uint  i, j;
  37.   for(i = 0; i < 100; i++)  
  38.   for(j = 0; j < 500; j++);
  39. }
  40. */
  41. void readkey(void)                   //按键读取函数
  42. {
  43.   uchar  i, j;
  44.   if(!key)  
  45.     {
  46.      for(i = 0; i < 10; i++)
  47.      for(j = 0; j < 120; j++);       //延时消抖
  48.   if(!key)  
  49.     {
  50.      while(!key);            //等待按键释放
  51.      n++;
  52.      n %= 2;                //n = 0~2
  53.      }
  54.      }
  55.   }

  56. /*----------------------------
  57.    初始化ADC
  58. -----------------------------*/
  59. void InitADC()
  60. {
  61.     P1ASF=0x01;                            //设置P1.0端口作为模拟输入
  62.     ADC_RES=0;                             //清除以前的结果
  63.     ADC_CONTR=ADC_POWER|ADC_SPEEDLL;       //开启ACD电源、设置转换速度420
  64.     delayms(1);                            //上电延时                                                
  65. }

  66. /*----------------------------
  67.    获取ADC结果
  68. -----------------------------*/
  69. uchar zhADC(uchar ch)                                //zhADC(获取ADC结果)
  70. {
  71.     ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;    //启动转换
  72.     _nop_();                                         //4个时钟延时
  73.     _nop_();
  74.     _nop_();
  75.     _nop_();
  76.     while(!(ADC_CONTR & ADC_FLAG));                  //等待完成标志
  77.     ADC_CONTR &=~ADC_FLAG;                           //Close ADC(关闭ADC)
  78.     return ADC_RES;                                  //返回ADC结果
  79. }

  80. /*----------------------------
  81. 1ms延时子程序(12M晶振)
  82. -----------------------------*/
  83. void delayms(uint k)                    

  84. {
  85.     uint i,j;            
  86.     for(i=k;i>0;i--)   
  87.     for(j=747;j>0;j--);   
  88. }
  89. /*----------------------------
  90. 执行ADC转换结果子程序SR_高档 SRL_低档
  91. -----------------------------*/
  92. void SR()
  93. {               
  94.       uchar M;                        
  95.       M=0x22;                         //TEMP=55度

  96.       if (zhADC(0)>=M)                //如果ADC_1通道检测值大于等于M
  97.          out=1;                       //驱动输出1
  98.     else
  99.          out=0;                       //否则驱动输出0
  100. }
  101. /*低温控制*/
  102. void SRL()
  103. {               
  104.       uchar M;                        
  105.       M=0x30;                         //TEMP=45度

  106.       if (zhADC(0)>=M)                //如果ADC_1通道检测值大于等于M
  107.         out=1;                        //驱动输出1
  108.     else
  109.         out=0;                        //否则驱动输出0
  110. }
  111. void main()      //主函数
  112. {
  113.   port_mode();                         //初始化IO口
  114.   InitADC();                           //Init ADC sfr (初始化ADC SFR)

  115.   while(1)      
  116.   {
  117.   switch(n)      //开关选择
  118.   {
  119.   //case 0: ledL = 1;ledH = 1; readkey(); break;    //全熄灭

  120.   case 0: ledL = 0;readkey(); SRL(); break;       //LEDL亮并执行低档控制45度

  121.   case 1: ledH = 0;ledL = 1;readkey();SR(); break;              //LEDH亮并执行高档控制55度
  122.   //case 3: ledL = 1;ledH = 1; readkey();
  123.   }
  124.   }
  125. }
复制代码


发表于 2019-6-14 13:03:22 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

发表于 2019-6-21 10:40:28 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2019-6-21 14:18:37 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

发表于 2019-6-22 03:50:06 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

 楼主| 发表于 2019-6-22 18:34:09 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

发表于 2019-6-29 12:38:33 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

 楼主| 发表于 2019-7-8 23:08:12 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

发表于 2019-7-10 12:24:48 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

 楼主| 发表于 2019-7-11 21:02:29 | 显示全部楼层
游客请登录后查看回复内容
回复

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-12-17 20:14 , Processed in 0.171600 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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