找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2286|回复: 1
打印 上一主题 下一主题
收起左侧

单片机数码管计时器原程序

[复制链接]
跳转到指定楼层
楼主
ID:344081 发表于 2018-8-6 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
计时器原程序
  1. //A:0,B:7,C:2,D:4,E:5,F:1,G:6,H:3共阴
  2. #include<STC10F.h>
  3. sbit        port_led1                =P3^0;       
  4. sbit        port_led2                =P3^1;       
  5. sbit        port_led3                =P3^2;       
  6. sbit        port_led4                =P3^3;
  7. sbit        port_relay                =P3^4;
  8. sbit        port_led0                =P3^5;
  9. sbit        port_key                =P3^7;
  10. #define        time_set0        5
  11. //-----------------------------------------------
  12. //                表格
  13. //-----------------------------------------------
  14. const unsigned char frg[16] = {
  15. 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
  16. //-----------------------------------------------
  17. unsigned char        windows;
  18. unsigned char        num0;
  19. unsigned char        num1;
  20. unsigned char        num2;
  21. unsigned char        num3;
  22. unsigned char        num4;
  23. unsigned long        data_time;                //倒计时显示寄存器
  24. unsigned long        data_set;                //时间设定
  25. unsigned long        data_check;                //数据交换
  26. unsigned char        time_ms0;
  27. unsigned char        time_ms1;
  28. unsigned char        data_wei;
  29. unsigned char        soon_key;
  30. unsigned char        at24_l;
  31. unsigned char        at24_h;
  32. unsigned char        address_h;                //擦除高地址
  33. unsigned char        address_l;                //擦除低地址
  34. unsigned char        wob_ok;
  35. unsigned char        wob_wei;
  36. unsigned char        wob_inc;
  37. unsigned char        wob_dec;

  38. unsigned char        time_fanhui;                //设定完毕自动返回计时

  39. unsigned char        data_alarm;                //报警间隔计时
  40. unsigned char        long_win;                //蜂鸣器响的次序
  41. unsigned char        data_buzzer;                //蜂鸣器响的时间
  42. bit                flag_alarm;
  43. bit                flag_buzzer;

  44. bit                flag_set;                //设定闪烁的标志

  45. bit                flag_ok;
  46. bit                flag_wei;
  47. bit                flag_inc;
  48. bit                flag_inc_check;
  49. bit                flag_dec;
  50. bit                flag_dec_check;

  51. bit                flag_soon;                //长按的标志
  52. bit                flag_close;                //按键闭合的标志

  53. bit                flag_write;                //烧写的标志
  54. //-----------------------------------------------
  55. //定时中断0
  56. //-----------------------------------------------
  57. void Timer0(void) interrupt 1
  58. {
  59.         TH0=0x3c;
  60.         TL0=0xb0;     //50ms
  61.                 //-----------------------------------------
  62.                 if(windows==0&&data_time==0)
  63.                 {
  64.                         time_fanhui++;
  65.                         if(time_fanhui>40)
  66.                         {
  67.                         //        windows=0;
  68.                         //        flag_write=1;
  69.                                 time_fanhui=0;
  70.                        
  71.                                 data_time=data_set;
  72.                         //        time_ms0=0;
  73.                                 port_relay=1;
  74.                                 //flag_alarm=0;
  75.                                 port_led0=1;
  76.                         //        flag_set=0;        //停止闪烁
  77.                         //        data_wei=0;        //再设定时仍然从个位开始
  78.                         }
  79.                 }               
  80.         //---------------------------------------
  81.         if (flag_inc_check==0 && flag_dec_check==0)
  82.         {
  83.                 flag_close=0;
  84.                 flag_soon=0;
  85.                 soon_key=0;       
  86.         }
  87.         //---------------------------------------
  88.         if(windows==0)
  89.         {
  90.                 if(data_time==0)
  91.                 {
  92.                         port_relay=0;
  93.                                 //flag_alarm=1;
  94.                         port_led0=0;
  95.                 }
  96.                 else
  97.                 {
  98.                         time_ms0++;
  99.                         if(time_ms0>=20)
  100.                         {
  101.                                 time_ms0=0;
  102.                                 data_time--;
  103.                         }
  104.                 }
  105.         }
  106.         //---------------------------------------
  107.         if(windows==1)
  108.         {
  109.                 if(flag_soon==0)
  110.                 {
  111.                         if(flag_close==1)
  112.                         {
  113.                                 soon_key++;
  114.                                 if(soon_key==30)
  115.                                 {
  116.                                         flag_soon=1;
  117.                                         data_wei=0;       
  118.                                 }       
  119.                         }
  120.                 }
  121.                 else
  122.                 {
  123.                         flag_inc=0;
  124.                         flag_dec=0;
  125.                 }       
  126.         }
  127.         //-------------------------------------------------
  128.         time_ms1++;
  129.         if(time_ms1>=5)
  130.         {
  131.                 time_ms1=0;
  132.                 if(windows==1)
  133.                 {
  134.                         flag_set=~flag_set;
  135.                 }                       
  136.         }                               
  137. }
  138. //-----------------------------------------------
  139. //定时中断1
  140. //-----------------------------------------------
  141. void Timer1(void) interrupt 3
  142. {
  143.         TH1=0xd8;
  144.         TL1=0xf0;     //10ms
  145. }
  146. //---------------------------------------------------------
  147. //1ms延时
  148. //---------------------------------------------------------
  149. void delay_1ms(unsigned int z)                              
  150. {
  151.         unsigned int x,y;
  152.         for(x=z;x>0;x--)
  153.         for(y=75;y>0;y--);
  154. }
  155. //---------------------------------------------------------
  156. //ISP功能禁止
  157. void        ISP_DISABLE(void)
  158. {
  159.         ISP_CONTR=0;
  160.         ISP_CMD  =0;
  161.         ISP_TRIG =0;
  162. }

  163. //字节读取
  164. unsigned char BYTE_READ(unsigned char isp_addh_buf,unsigned char isp_addl_buf)
  165. {
  166.         ISP_CONTR=0x83;
  167.         ISP_CMD  =0x01;
  168.         ISP_ADDRH=isp_addh_buf;
  169.         ISP_ADDRL=isp_addl_buf;
  170.         EA=0;
  171.         ISP_TRIG=0x5a;
  172.         ISP_TRIG=0xa5;
  173.         EA=1;
  174.         ISP_DISABLE();
  175.         return ISP_DATA;
  176. }

  177. //字节编程
  178. void BYTE_PROGRAM(unsigned char isp_addh_buf,unsigned char isp_addl_buf,unsigned char isp_data_buf)
  179. {
  180.         ISP_CONTR=0x83;
  181.         ISP_CMD  =0x02;
  182.         ISP_ADDRH=isp_addh_buf;
  183.         ISP_ADDRL=isp_addl_buf;
  184.         ISP_DATA=isp_data_buf;
  185.         EA=0;
  186.         ISP_TRIG=0x5a;
  187.         ISP_TRIG=0xa5;
  188.         EA=1;
  189.         ISP_DISABLE();
  190. }

  191. //扇区擦除
  192. void SECTOR_ERASE(void)
  193. {
  194.         ISP_CONTR=0x83;
  195.         ISP_CMD  =0x03;
  196.         //ISP_ADDRH=0x00;
  197.         //ISP_ADDRL=0x00;
  198.         ISP_ADDRH=address_h;
  199.         ISP_ADDRL=address_l;
  200.         EA=0;
  201.         ISP_TRIG=0x5a;
  202.         ISP_TRIG=0xa5;
  203.         EA=1;
  204.         ISP_DISABLE();
  205. }
  206. //---------------------------------------------------------
  207. //设定键
  208. //---------------------------------------------------------
  209. void        key_ok(void)
  210. {
  211.         P1=0xfe;
  212.         delay_1ms(1);
  213.         if(port_key==0&&flag_ok==0)       
  214.         {
  215.                 wob_ok++;
  216.                 if(wob_ok>10)
  217.                 {
  218.                         wob_ok=0;
  219.                         flag_ok=1;
  220.                         time_fanhui=0;
  221.                         windows++;
  222.                         if(windows>1)
  223.                         {
  224.                                 windows=0;
  225.                                 flag_write=1;
  226.                        
  227.                                 if(data_time>0)
  228.                                 {
  229.                                         data_time=data_set;
  230.                                         time_ms0=0;
  231.                                         port_relay=1;
  232.                                         //flag_alarm=0;
  233.                                         port_led0=1;
  234.                                 }
  235.                                 flag_set=0;        //停止闪烁
  236.                                 data_wei=0;        //再设定时仍然从个位开始
  237.                         }
  238.                 }       
  239.         }
  240.         else
  241.         {
  242.                 if(port_key==1)       
  243.                 {
  244.                         wob_ok=0;
  245.                         flag_ok=0;       
  246.                 }
  247.         }
  248. }
  249. //---------------------------------------------------------
  250. //位移键
  251. //---------------------------------------------------------
  252. void        key_wei(void)
  253. {
  254.         P1=0xfb;
  255.         delay_1ms(1);
  256.         if(port_key==0&&flag_wei==0&&windows==1)       
  257.         {
  258.                 wob_wei++;
  259.                 if(wob_wei>10)
  260.                 {
  261.                         wob_wei=0;
  262.                         flag_wei=1;
  263.                         time_fanhui=0;
  264.                         data_wei++;
  265.                         if(data_wei>3)
  266.                         {
  267.                                 data_wei=0;       
  268.                         }
  269.                 }
  270.         }
  271.         else
  272.         {
  273.                 if(port_key==1)       
  274.                 {
  275.                         wob_wei=0;
  276.                         flag_wei=0;       
  277.                 }
  278.         }
  279. }
  280. //---------------------------------------------------------
  281. //加
  282. //---------------------------------------------------------
  283. void        key_inc(void)
  284. {
  285.         P1=0xbf;
  286.         delay_1ms(1);
  287.         if(port_key==0&&flag_inc==0)       
  288.         {
  289.                 wob_inc++;
  290.                 if(wob_inc>10)
  291.                 {
  292.                         wob_inc=0;
  293.                         flag_inc=1;
  294.                         flag_inc_check=1;
  295.                         time_fanhui=0;
  296.                         flag_close=1;
  297.                         if(windows==1)
  298.                         {
  299.                                 if(data_wei==0)
  300.                                 {
  301.                                         if(data_set<9999)
  302.                                         {
  303.                                                 data_set++;       
  304.                                         }       
  305.                                 }
  306.                                 else if(data_wei==1)
  307.                                 {
  308.                                         if(data_set<9989)
  309.                                         {
  310.                                                 data_set=data_set+10;       
  311.                                         }
  312.                                         else
  313.                                         {
  314.                                                 data_set=9999;       
  315.                                         }       
  316.                                 }
  317.                                 else if(data_wei==2)
  318.                                 {
  319.                                         if(data_set<9899)
  320.                                         {
  321.                                                 data_set=data_set+100;       
  322.                                         }
  323.                                         else
  324.                                         {
  325.                                                 data_set=9999;       
  326.                                         }       
  327.                                 }
  328.                                 else if(data_wei==3)
  329.                                 {
  330.                                         if(data_set<8999)
  331.                                         {
  332.                                                 data_set=data_set+1000;       
  333.                                         }
  334.                                         else
  335.                                         {
  336.                                                 data_set=9999;       
  337.                                         }       
  338.                                 }       
  339.                         }
  340.                 }
  341.         }       
  342.         else
  343.         {
  344.                 if(port_key==1)       
  345.                 {
  346.                         wob_inc=0;
  347.                         flag_inc=0;
  348.                         flag_inc_check=0;
  349.                 }
  350.         }
  351. }
  352. //---------------------------------------------------------
  353. //减
  354. //---------------------------------------------------------
  355. void        key_dec(void)
  356. {
  357.         P1=0xef;
  358.         delay_1ms(1);
  359.         if(port_key==0&&flag_dec==0)       
  360.         {
  361.                 wob_dec++;
  362.                 if(wob_dec>10)
  363.                 {
  364.                         wob_dec=0;
  365.                         flag_dec=1;
  366.                         flag_dec_check=1;
  367.                         time_fanhui=0;
  368.                         flag_close=1;
  369.                         if(windows==1)
  370.                         {
  371.                                 if(data_wei==0)
  372.                                 {
  373.                                         if(data_set>0)       
  374.                                         {
  375.                                                 data_set--;       
  376.                                         }
  377.                                 }
  378.                                 else if(data_wei==1)
  379.                                 {
  380.                                         if(data_set>=10)
  381.                                         {
  382.                                                 data_set=data_set-10;       
  383.                                         }
  384.                                         else
  385.                                         {
  386.                                                 data_set=0;       
  387.                                         }       
  388.                                 }
  389.                                 else if(data_wei==2)
  390.                                 {
  391.                                         if(data_set>=100)
  392.                                         {
  393.                                                 data_set=data_set-100;       
  394.                                         }
  395.                                         else
  396.                                         {
  397.                                                 data_set=0;       
  398.                                         }       
  399.                                 }
  400.                                 else if(data_wei==3)
  401.                                 {
  402.                                         if(data_set>=1000)
  403.                                         {
  404.                                                 data_set=data_set-1000;       
  405.                                         }
  406.                                         else
  407.                                         {
  408.                                                 data_set=0;       
  409.                                         }       
  410.                                 }
  411.                         }
  412.                 }
  413.         }
  414.         else
  415.         {
  416.                 if(port_key==1)       
  417.                 {
  418.                         wob_dec=0;
  419.                         flag_dec=0;
  420.                         flag_dec_check=0;
  421.                 }
  422.         }
  423. }
  424. //---------------------------------------------------------
  425. void        data_write(void)
  426. {
  427.         if(flag_write==1)
  428.         {               
  429.                 address_h=0x00;
  430.                 address_l=0x00;
  431.                 SECTOR_ERASE();       
  432.                 at24_l=data_set;
  433.                 at24_h=data_set>>8;
  434.                 BYTE_PROGRAM(0x00,0x00,at24_h);
  435.                 BYTE_PROGRAM(0x00,0x01,at24_l);
  436.                        
  437.                 flag_write=0;
  438.         }       
  439. }
  440. //-----------------------------------------------
  441. //                显示程序
  442. //-----------------------------------------------
  443. void        disp_loop(void)
  444. {
  445.         if(windows==0)
  446.         {
  447.                 data_check=data_time;       
  448.         }
  449.         else if(windows==1)
  450.         {
  451.                 data_check=data_set;       
  452.         }
  453.         if(flag_set==0||data_wei!=3)
  454.         {
  455.                 num0 = data_check/1000;
  456.                 P1 = frg[num0];
  457.                 port_led1=0;
  458.                 port_led2=1;
  459.                 port_led3=1;
  460.                 port_led4=1;
  461.                 delay_1ms(4);
  462.                 port_led1=1;
  463.                 port_led2=1;
  464.                 port_led3=1;
  465.                 port_led4=1;
  466.                 delay_1ms(1);
  467.         }
  468.         if(flag_set==0||data_wei!=2)
  469.         {
  470.                 num1 = (data_check%1000)/100;
  471.                 P1 = frg[num1];
  472.                 port_led1=1;
  473.                 port_led2=0;
  474.                 port_led3=1;
  475.                 port_led4=1;
  476.                 delay_1ms(4);
  477.                 port_led1=1;
  478.                 port_led2=1;
  479.                 port_led3=1;
  480.                 port_led4=1;
  481.                 delay_1ms(1);
  482.         }
  483.         if(flag_set==0||data_wei!=1)
  484.         {
  485.                 num2 = (data_check%100)/10;
  486.                 P1 = frg[num2];
  487.                 port_led1=1;
  488.                 port_led2=1;
  489.                 port_led3=0;
  490.                 port_led4=1;
  491.                 delay_1ms(4);
  492.                 port_led1=1;
  493.                 port_led2=1;
  494.                 port_led3=1;
  495.                 port_led4=1;
  496.                 delay_1ms(1);
  497.         }
  498.         if(flag_set==0||data_wei!=0)
  499.         {       
  500.                 num3 = data_check%10;
  501.                 P1 = frg[num3];
  502.                 port_led1=1;
  503.                 port_led2=1;
  504.                 port_led3=1;
  505.                 port_led4=0;
  506.                 delay_1ms(4);
  507.                 port_led1=1;
  508.                 port_led2=1;
  509.                 port_led3=1;
  510.                 port_led4=1;
  511.                 delay_1ms(1);       
  512.         }       
  513. }
  514. //---------------------------------------------------------
  515. //初始化
  516. //---------------------------------------------------------
  517. void SysInit(void)
  518. {
  519.         P1M0=0xff;                //p1,0设定为开漏
  520.         P1M1=0x00;                //p1,1-p1,7设定为推挽输出
  521.        
  522.         P3M0=0x7f;
  523.         P3M1=0x00;                //推挽输出
  524.        
  525.         TMOD=0x11;                    //T0/T1=16BIT MODE
  526.         TH0=0xF8;               
  527.         TL0=0x2F;                    //2ms
  528.         TH1=0x3c;
  529.         TL1=0xb0;                //50ms
  530.         ET0=1;                        //开T0中断  
  531.         ET1=1;                       //开T1中断
  532.         EA=1;                         //开总中断
  533.         TR0=1;                        //启动T0
  534.         TR1=1;                        //开启T1
  535.         port_relay=1;
  536.         port_led0=1;
  537. }
  538. void main(void)
  539. {
  540.         SysInit();
  541.        
  542.         at24_h=BYTE_READ(0x00,0x00);
  543.         at24_l=BYTE_READ(0x00,0x01);
  544.         data_set=at24_h;
  545.         data_set=data_set<<8;
  546.         data_set=data_set+at24_l;
  547.         if(data_set>9999)
  548.         {
  549.                 data_set=30;
  550.         }
  551.         data_time=data_set;
  552.         while(1)
  553.         {
  554.                 disp_loop();
  555.                 key_ok();
  556.                 key_wei();
  557.                 key_inc();
  558.                 key_dec();
  559.                 data_write();
  560.         }
  561. }

复制代码


定时器(2秒再重复).rar

36.6 KB, 下载次数: 6, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-8-7 00:34 | 只看该作者
补全原理图即可获得100黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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