找回密码
 立即注册

QQ登录

只需一步,快速开始

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

红外遥控数字钟程序修改

[复制链接]
ID:130231 发表于 2017-3-16 16:26 | 显示全部楼层 |阅读模式
昨天网上发现红外遥控数字PCB板文件,之后又找个程序。可是发原理图跟程序不配。虽然改一些,但是接就不知如何改程序了。如何让程序原理图匹配上。不知那位高手能改造一下。只改程序的。

红外遥控数字钟.zip

203.28 KB, 下载次数: 23

回复

使用道具 举报

ID:155507 发表于 2017-3-16 20:47 | 显示全部楼层
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit rs=P1^0;      //以下三个是LCD1602的位
  5. sbit rw=P1^1;
  6. sbit E=P1^2;
  7. sbit sclk=P2^5;   //时钟芯片DS1302位
  8. sbit data_io=P2^6;
  9. sbit rst=P2^7;
  10. sbit hwx=P3^2;//红外IR1838定义接口
  11. //sbit s7=P0^7;
  12. sbit s0=P3^3;//四个按键
  13. sbit s1=P3^4;
  14. sbit s2=P3^5;
  15. //sbit s3=P0^3;
  16. sbit buzzer=P2^2;//蜂鸣器
  17. sbit out2=P2^0;// 继电器 k2
  18. sbit out3=P2^1;// 继电器 k1
  19. uchar code table1[]=" 20  /  /       ";
  20. unsigned char l_lhj[66],ir_ma;      //储存红外键码值
  21. uchar code table2[]="      :  :  ";
  22. uchar code weektable[]="Mon TuesWed ThurFri Sat Sun ";
  23. uchar code clocktable2[]="    12:30:30";
  24. uchar code clocktable1[]="Nao Zhong:";
  25. uchar shi,fen,miao,month,day,week,year,qbyear=20;
  26. uchar Nshi=12,Nfen=30,Nmiao=30;
  27. uchar s0num,s3num,flag,flaga,biaozhi;
  28. void scan_key();   //键盘扫描函数
  29. void naozhong();   //键盘设置闹钟
  30. void didi();
  31. void shezhinaozhong();
  32. void delay();
  33. void scan_hwx();    //红外遥控设置时间
  34. void naozhong_hwx();//红外遥控设置闹钟
  35. void delay_ms(uint ms)
  36. {
  37.         uint i,j;
  38.         for (i=ms;i>0;i--)
  39.         for(j=124;j>0;j--);
  40. }
  41. void delay_1s()          //延迟大概1s
  42. {
  43.         uint a,b;  
  44.         a=20;b=5000;
  45.         while(a)
  46.         {
  47.                 a--;
  48.                 while(b)
  49.                 {
  50.                         b--;
  51.                 }
  52.         }
  53. }
  54. void write_ds1302 (uchar addr ,uchar shu)//往DS1302写数据
  55. {
  56.         uchar temp,t;
  57.         rst=0;
  58.         sclk=0;
  59.         rst=1;
  60.         temp=addr;
  61.         for(t=0;t<8;t++)
  62.         {
  63.                 if((temp&0x01)==1)
  64.                 {
  65.                         data_io=1;
  66.                 }
  67.                 else
  68.                 data_io=0;
  69.                 sclk=1;
  70.                 delay_ms(1);
  71.                 sclk=0;
  72.                 temp=temp>>1;
  73.         }
  74.         temp=shu;
  75.         for(t=0;t<8;t++)
  76.         {
  77.                 if((temp&0x01)==1)
  78.                 {
  79.                         data_io=1;
  80.                 }
  81.                 else
  82.                 data_io=0;
  83.                 sclk=1;
  84.                 delay_ms(1);
  85.                 sclk=0;
  86.                 temp=temp>>1;
  87.         }
  88.         rst=0;
  89. }
  90. uchar read_ds1302(uchar addr)//从DS1302读取数据
  91. {
  92.         uchar temp ,t;
  93.         rst =0;
  94.         sclk=0;
  95.         rst=1;
  96.         temp=addr;
  97.         for(t=0;t<8;t++)
  98.         {
  99.                 if (temp&0x01)
  100.                 data_io=1;
  101.                 else
  102.                 data_io=0;
  103.                 sclk=1;
  104.                 sclk=0;
  105.                 temp=temp>>1;
  106.         }
  107.         temp=0;
  108.         for(t=0;t<7;t++)
  109.         {
  110.                 if(data_io==1)
  111.                 {
  112.                         temp=temp|0x80;
  113.                 }
  114.                 else
  115.                 temp=temp&0x7f;
  116.                 sclk=1;
  117.                 sclk=0;
  118.                 temp=temp>>1;

  119.         }
  120.         return temp;
  121. }
  122. void write_com (uchar com)//LCD1602的写命令
  123. {
  124.         P0=com;
  125.         rs=0;
  126.         rw=0;
  127.         E=1;
  128.         delay_ms(1);
  129.         E=0;

  130. }
  131. void write_date (uchar date)//LCD1602的写数据
  132. {
  133.         P0=date;
  134.         rs=1;
  135.         rw=0;
  136.         E=0;
  137.         delay_ms(1);
  138.         E=1;
  139.         delay_ms(1);
  140.         E=0;
  141. }
  142. void init()//LCD1602初始化
  143. {
  144.         uchar i;
  145.         EA=1;   //首先开启总中断
  146.         EX1=1;    //开启外部中断 1
  147.         IT1=1;
  148.         write_com(0x38);
  149.         delay_ms(2);
  150.         write_com(0x0c);
  151.         delay_ms(2);
  152.         write_com(0x06);
  153.         delay_ms(2);

  154.         write_com(0x80);
  155.         delay_ms(1);
  156.         for(i=0;i<16;i++)
  157.         {
  158.                 write_date (table1[i]);
  159.                
  160.         }
  161.         write_com(0xc0);
  162.         delay_ms(1);
  163.         for(i=0;i<12;i++)
  164.         {
  165.                 write_date (table2[i]);
  166.                
  167.         }

  168.         write_com(0x80+0x10);
  169.         delay_ms(1);
  170.         for(i=0;i<10;i++)
  171.         {
  172.                 write_date (clocktable1[i]);
  173.                
  174.         }
  175.         write_com(0xc0+0x10);
  176.         delay_ms(1);
  177.         for(i=0;i<12;i++)
  178.         {
  179.                 write_date (clocktable2[i]);
  180.                
  181.         }
  182. }


  183. void write_sfm_10(uchar add,uchar date)//在LCD1602写小时、分、秒
  184. {
  185.         uchar ten,ge;
  186.         ten=date/10;
  187.         ge=date%10;
  188.         write_com(0xc0+add);
  189.         write_date(0x30+ten);
  190.         write_date(0x30+ge);
  191. }

  192. void write_nyr_10(uchar add,uchar date)//写年、月、日
  193. {
  194.         uchar ten,ge;
  195.         ten=date/10;
  196.         ge=date%10;
  197.         write_com(0x80+add);
  198.         write_date(0x30+ten);
  199.         write_date(0x30+ge);
  200. }
  201. void write_week(uchar add,uchar week)//写星期
  202. {
  203.         uchar ge,i;
  204.         ge=week&0x0f;
  205.         write_com(0x80+add);
  206.         if(ge==1)
  207.         {
  208.                
  209.                 for(i=0;i<4;i++)
  210.                 {
  211.                         write_date(weektable[i]);
  212.                 }
  213.                
  214.         }
  215.         if(ge==2)
  216.         {
  217.                
  218.                 for(i=4;i<8;i++)
  219.                 {
  220.                         write_date(weektable[i]);
  221.                 }
  222.                
  223.         }
  224.         if(ge==3)
  225.         {

  226.                 for(i=8;i<12;i++)
  227.                 {
  228.                         write_date(weektable[i]);
  229.                 }
  230.                
  231.         }
  232.         if(ge==4)
  233.         {

  234.                 for(i=12;i<16;i++)
  235.                 {
  236.                         write_date(weektable[i]);
  237.                 }
  238.                
  239.         }
  240.         if(ge==5)
  241.         {
  242.                
  243.                 for(i=16;i<20;i++)
  244.                 {
  245.                         write_date(weektable[i]);
  246.                 }
  247.                
  248.         }
  249.         if(ge==6)
  250.         {
  251.                
  252.                 for(i=20;i<24;i++)
  253.                 {
  254.                         write_date(weektable[i]);
  255.                 }
  256.                
  257.         }
  258.         if(ge==7)
  259.         {

  260.                 for(i=24;i<28;i++)
  261.                 {
  262.                         write_date(weektable[i]);
  263.                 }
  264.                
  265.         }
  266. }

  267. void main ()
  268. {
  269.         init ();
  270.         write_ds1302(0x8e,0x00);//打开写保护
  271.         write_ds1302(0x90,0xa7);
  272.         // 初始化一次后就不用初始化了。
  273.         //write_ds1302(0x80,0x50);//second
  274.         // write_ds1302(0x82,0x59);//minute
  275.         //write_ds1302(0x84,0x23);//hour
  276.         //write_ds1302(0x8a,0x07);//week
  277.         // write_ds1302(0x86,0x23);//day
  278.         // write_ds1302(0x88,0x05);//month
  279.         // write_ds1302(0x8c,0x10);//year
  280.         while(1)
  281.         {
  282.                 scan_key();//键盘扫描

  283.                 if (flag==0)
  284.                 {
  285.                         shi=read_ds1302(0x85);//从DS1302读取时间和日期,数据为16进制
  286.                         fen=read_ds1302(0x83);     
  287.                         miao=read_ds1302(0x81);
  288.                         day=read_ds1302(0x87);
  289.                         month=read_ds1302(0x89);
  290.                         year=read_ds1302(0x8d);
  291.                         week=read_ds1302(0x8b);

  292.                         miao=(miao/16)*10+miao%16;//把16进制转化成10进制
  293.                         fen=(fen/16)*10+fen%16;
  294.                         shi=(shi/16)*10+shi%16;   
  295.                         day=(day/16)*10+day%16;
  296.                         month=(month/16)*10+month%16;
  297.                         year=(year/16)*10+year%16;

  298.                         write_sfm_10(10,miao);//显示时间日期
  299.                         write_sfm_10(7,fen);
  300.                         write_sfm_10(4,shi);
  301.                         write_nyr_10(9,day);
  302.                         write_nyr_10(6,month);
  303.                         write_nyr_10(3,year);
  304.                         write_week(12,week);


  305.                        
  306.                 }
  307.                 naozhong();//闹钟功能
  308.                 if(shi==Nshi&&fen==Nfen&&miao==Nmiao)
  309.                 {
  310.                         flaga=1;  
  311.                 }
  312.                 if(flaga==1)
  313.                 {
  314.                         didi();                                 //蜂鸣器响
  315.                 }  
  316.         }
  317. }
  318. void delay(void)        //空5个指令
  319. {
  320.         uchar i=13;
  321.         while(i)
  322.         i--;
  323. }
  324. void hongwai(void)   interrupt 2     //外部中断 1 ,INT1(P3^3)连接红外线接收IC数据脚
  325. {
  326.         uchar i,j,tmp;
  327.         EX1=0;
  328.         j=33;   //传送一组数包括引导码1位,地址码8位加反码8位,指令码8位加反码8位,总共33位
  329.         i=0;   //从第一维数组开始
  330.         tmp=100;  //加八延时,
  331.         while(tmp)
  332.         {
  333.                 tmp--;
  334.         }
  335.         if(hwx)
  336.         {             //然后再检测红线接收脚是有数据招收,有继续,没有则退出
  337.                 EX1=1;
  338.                 return;
  339.         }
  340.         while(j)
  341.         {        //循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就
  342.                 //可以判断1或0了,在这里我们都接收,为串口调试软件接收计算波形
  343.                 //还有一点要知道,接收波形是反向,在没有接收时端口为高电平
  344.                 tmp=0;
  345.                 l_lhj[i]=1;  //时间量从1开始
  346.                 while(!hwx)
  347.                 {                    //检测高低电平的变化
  348.                         l_lhj[i]++;  //没变继续加1
  349.                         delay();  //加入延时,是因为我们采用8位二进来存储,如果不加延时,时间量将计满
  350.                         tmp++;   //此变量为防止干扰带来的死循环
  351.                         if(tmp==250)
  352.                         break;
  353.                 }
  354.                 i++;
  355.                 tmp=0;
  356.                 l_lhj[i]=1;  //时间量从1开始
  357.                 while(hwx)
  358.                 {                  //检测高低电平的变化
  359.                         l_lhj[i]++; //没变继续加1
  360.                         delay();  //同上
  361.                         tmp++;
  362.                         if(tmp==250)
  363.                         break;
  364.                 }
  365.                 i++;  
  366.                 j--;
  367.         }
  368.         i=255;    //加入循环延时,抗干扰
  369.         while(i){
  370.                 tmp=255;
  371.                 while(tmp){

  372.                         tmp--;
  373.                 }
  374.                 i--;   
  375.         }


  376.         tmp=0;
  377.         for(i=35;i<51;i++,i++){
  378.                 tmp>>=1;
  379.                 if(l_lhj[i]>30)
  380.                 tmp+=0x80;
  381.         }
  382.         ir_ma=tmp;
  383.         scan_hwx();
  384.         // naozhong_hwx();
  385.         if(ir_ma==0x12)
  386.         {
  387.                 flaga=0;
  388.         }
  389.         if(ir_ma==0x1b)
  390.         {
  391.                 flaga=1;
  392.         }

  393.         buzzer=0;
  394.         delay_1s();
  395.         buzzer=1;
  396.         EX1=1;
  397. }
  398. void scan_key()   //扫描键盘
  399. {  
  400.         s7=0;
  401.         if(flaga==1)        //关闭闹钟
  402.         {
  403.                 if(s1==0)
  404.                 {
  405.                         delay_ms(10);
  406.                         if(s1==0)
  407.                         {
  408.                                 while(!s1);
  409.                                 flaga=0;
  410.                         }
  411.                 }
  412.                 if(s2==0)
  413.                 {
  414.                         delay_ms(10);
  415.                         if(s2==0)
  416.                         {
  417.                                 while(!s2);
  418.                                 flaga=0;
  419.                         }
  420.                 }
  421.                
  422.         }
  423.         if(s0==0)
  424.         {
  425.                 delay_ms(10);
  426.                 if(s0==0)
  427.                 {
  428.                         buzzer=0;
  429.                         while(!s0);
  430.                         s0num++;

  431.                         buzzer=1;
  432.                         if(s0num==1)
  433.                         {  flag=1;
  434.                                
  435.                                 write_com(0xc0+11);
  436.                                 write_com(0x0f);

  437.                                 shi=read_ds1302(0x85);
  438.                                 fen=read_ds1302(0x83);
  439.                                 miao=read_ds1302(0x81);
  440.                                 day=read_ds1302(0x87);
  441.                                 month=read_ds1302(0x89);
  442.                                 year=read_ds1302(0x8d);
  443.                                 week=read_ds1302(0x8b);

  444.                                 miao=(miao/16)*10+miao%16;
  445.                                 fen=(fen/16)*10+fen%16;
  446.                                 shi=(shi/16)*10+shi%16;   
  447.                                 day=(day/16)*10+day%16;
  448.                                 month=(month/16)*10+month%16;
  449.                                 year=(year/16)*10+year%16;
  450.                         }
  451.                         if(s0num==2)
  452.                         {
  453.                                 write_com(0xc0+8);
  454.                         }
  455.                         if(s0num==3)
  456.                         {
  457.                                 write_com(0xc0+5);
  458.                         }
  459.                         if(s0num==4)
  460.                         {
  461.                                 write_com(0x80+12);
  462.                         }
  463.                         if(s0num==5)
  464.                         {
  465.                                 write_com(0x80+10);
  466.                         }
  467.                         if(s0num==6)
  468.                         {
  469.                                 write_com(0x80+7);
  470.                         }
  471.                         if(s0num==7)
  472.                         {
  473.                                 write_com(0x80+4);
  474.                         }
  475.                         if(s0num==8)
  476.                         {
  477.                                 s0num=0;

  478.                                 write_com(0x0c);
  479.                                 miao=(miao/10)*16+miao%10;//10进制转16进制
  480.                                 fen=(fen/10)*16+fen%10;
  481.                                 shi=(shi/10)*16+shi%10;
  482.                                 day=(day/10)*16+day%10;
  483.                                 month=(month/10)*16+month%10;
  484.                                 year=(year/10)*16+year%10;

  485.                                 write_ds1302(0x80,miao);
  486.                                 write_ds1302(0x82,fen);
  487.                                 write_ds1302(0x84,shi);
  488.                                 write_ds1302(0x8a,week);
  489.                                 write_ds1302(0x86,day);
  490.                                 write_ds1302(0x88,month);
  491.                                 write_ds1302(0x8c,year);
  492.                                 flag=0;
  493.                         }
  494.                
  495.                 }
  496.                
  497.                
  498.         }
  499.         if(s0num!=0)      //减键
  500.         {
  501.                 if(s2==0)
  502.                 {
  503.                         delay_ms(10);
  504.                         buzzer=0;
  505.                         if(s2==0)
  506.                         {   while(!s2);
  507.                                 buzzer=1;

  508.                                 if(s0num==1)
  509.                                 {
  510.        
  511.                                         if(miao==0)
  512.                                         {
  513.                                                
  514.                                                 miao=60;
  515.                                                
  516.                                         }
  517.                                         miao--;
  518.                                        
  519.                                         write_sfm_10(10,miao);
  520.                                        
  521.                                        
  522.                                         write_com(0xc0+11);
  523.                                        
  524.                                 }
  525.                                 if(s0num==2)
  526.                                 {
  527.                                        
  528.                                         if(fen==0)
  529.                                         {
  530.                                                 fen=60;
  531.                
  532.                                         }
  533.                                         fen--;
  534.                                         write_sfm_10(7,fen);
  535.                                         write_com(0xc0+8);
  536.                                 }
  537.                                 if(s0num==3)
  538.                                 {
  539.                                        
  540.                                         if(shi==0)
  541.                                         {
  542.                                                 shi=24;
  543.                                         }
  544.                                         shi--;
  545.                                         write_sfm_10(4,shi);
  546.                                         write_com(0xc0+5);
  547.                                 }
  548.                                 if(s0num==4)
  549.                                 {
  550.                                         week--;
  551.                                         if(week==0)
  552.                                         {
  553.                                                 week=7;
  554.                                         }
  555.                                        
  556.                                         write_week(12,week);
  557.                                         write_com(0x80+12);
  558.                                 }
  559.                                 if(s0num==5)
  560.                                 {
  561.                                         day--;
  562.                                         if(year%4==0 && year%100!=0 || year%400==0)
  563.                                         {
  564.                                                 if(month==2)
  565.                                                 {
  566.                                                         if(day==0)
  567.                                                         {
  568.                                                                 day=29;
  569.                                                         }
  570.                                                 }
  571.                                         }
  572.                                         if((year%4!=0 || year%100==0) && year%400!=0)
  573.                                         {
  574.                                                 if(month==2)
  575.                                                 {
  576.                                                         if(day==0)
  577.                                                         {
  578.                                                                 day=28;
  579.                                                         }
  580.                                                 }
  581.                                         }
  582.                                         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
  583.                                         {
  584.                                                 if(day==0)
  585.                                                 {
  586.                                                         day=31;
  587.                                                 }
  588.                                         }
  589.                                         if(month==4 || month==6 || month==9 || month==11)
  590.                                         {
  591.                                                 if(day==0)
  592.                                                 {
  593.                                                         day=30;
  594.                                                 }
  595.                                         }

  596.                                         write_nyr_10(9,day);
  597.                                         write_com(0x80+10);
  598.                                 }
  599.                                 if(s0num==6)
  600.                                 {
  601.                                         month--;
  602.                                         if(month==0)
  603.                                         {
  604.                                                 month=12;
  605.                                         }
  606.                                        
  607.                                         write_nyr_10(6,month);
  608.                                         write_com(0x80+7);
  609.                                 }
  610.                                 if(s0num==7)
  611.                                 {
  612.                                        
  613.                                         if(year==0)
  614.                                         {
  615.                                                 year=100;
  616.                                                 qbyear--;
  617.                                                 write_nyr_10(1,qbyear);
  618.                                         }
  619.                                         year--;
  620.                                         write_nyr_10(3,year);
  621.                                         write_com(0x80+4);
  622.                                 }
  623.                         }
  624.                 }
  625.         }

  626.         if(s0num!=0)     //加键
  627.         {
  628.                 if(s1==0)
  629.                 {
  630.                         delay_ms(10);
  631.                         buzzer=0;
  632.                         if(s1==0)
  633.                         {   while(!s1);
  634.                                 buzzer=1;
  635.                                 if(s0num==1)
  636.                                 {
  637.                                        
  638.                                         miao++;
  639.                                        
  640.                                         if(miao==60)
  641.                                         {
  642.                                                
  643.                                                 miao=0;
  644.                                                
  645.                                         }

  646.                                         write_sfm_10(10,miao);

  647.                                         write_com(0xc0+11);
  648.                                        
  649.                                 }
  650.                                 if(s0num==2)
  651.                                 {
  652.                                         fen++;
  653.                                         if(fen==60)
  654.                                         {
  655.                                                 fen=0;

  656.                                         }
  657.                                        
  658.                                         write_sfm_10(7,fen);
  659.                                         write_com(0xc0+8);
  660.                                 }
  661.                                 if(s0num==3)
  662.                                 {
  663.                                         shi++;
  664.                                         if(shi==24)
  665.                                         {
  666.                                                 shi=0;
  667.                                         }
  668.                                        
  669.                                         write_sfm_10(4,shi);
  670.                                         write_com(0xc0+5);
  671.                                 }
  672.                                 if(s0num==4)
  673.                                 {
  674.                                        
  675.                                         if(week==7)
  676.                                         {
  677.                                                 week=0;
  678.                                         }
  679.                                         week++;
  680.                                         write_week(12,week);
  681.                                         write_com(0x80+12);
  682.                                 }
  683.                                 if(s0num==5)
  684.                                 {
  685.                                        
  686.                                         if(year%4==0 && year%100!=0 || year%400==0)
  687.                                         {
  688.                                                 if(month==2)
  689.                                                 {
  690.                                                         if(day==29)
  691.                                                         {
  692.                                                                 day=0;
  693.                                                         }
  694.                                                 }
  695.                                         }
  696.                                         if((year%4!=0 || year%100==0) && year%400!=0)
  697.                                         {
  698.                                                 if(month==2)
  699.                                                 {
  700.                                                         if(day==28)
  701.                                                         {
  702.                                                                 day=0;
  703.                                                         }
  704.                                                 }
  705.                                         }
  706.                                         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
  707.                                         {
  708.                                                 if(day==31)
  709.                                                 {
  710.                                                         day=0;
  711.                                                 }
  712.                                         }
  713.                                         if(month==4 || month==6 || month==9 || month==11)
  714.                                         {
  715.                                                 if(day==30)
  716.                                                 {
  717.                                                         day=0;
  718.                                                 }
  719.                                         }
  720.                                        
  721.                                         day++;

  722.                                         write_nyr_10(9,day);
  723.                                         write_com(0x80+10);
  724.                                 }
  725.                                 if(s0num==6)
  726.                                 {
  727.                                        
  728.                                         if(month==12)
  729.                                         {
  730.                                                 month=0;
  731.                                         }
  732.                                         month++;
  733.                                         write_nyr_10(6,month);
  734.                                         write_com(0x80+7);
  735.                                 }
  736.                                 if(s0num==7)
  737.                                 {
  738.                                        
  739.                                         if(year==99)
  740.                                         {
  741.                                                 year=-1;
  742.                                                 qbyear++;
  743.                                                 write_nyr_10(1,qbyear);
  744.                                         }
  745.                                         year++;
  746.                                         write_nyr_10(3,year);
  747.                                         write_com(0x80+4);
  748.                                 }
  749.                         }
  750.                 }
  751.         }

  752. }

  753. void write_sfmnaozhong(uchar add,uchar date)    //显示闹钟时间
  754. {
  755.         uchar ten,ge;
  756.         ten=date/10;
  757.         ge=date%10;
  758.         write_com(0xc0+0x10+add);
  759.         write_date(0x30+ten);
  760.         write_date(0x30+ge);
  761. }
  762. void didi()
  763. {
  764.         buzzer=0;
  765.         delay_ms(50);
  766.         buzzer=1;
  767.         delay_ms(50);

  768. }
  769. void naozhong()         //设置闹钟时间
  770. {
  771.         if(s3==0)
  772.         {
  773.                 delay_ms(10);
  774.                 if(s3==0)
  775.                 {   uchar i;
  776.                         flag=0;
  777.                         s3num++;
  778.                         buzzer=0;
  779.                         while(!s3);
  780.                         buzzer=1;

  781.                         if(s3num==1)
  782.                         {
  783.                                 for(i=0;i<16;i++)
  784.                                 {
  785.                                         write_com (0x18);
  786.                                        
  787.                                 }
  788.                                
  789.                         }
  790.                         if(s3num==2)
  791.                         {   
  792.                                 write_com (0xc0+0x10+11);
  793.                                 write_com(0x0f);
  794.                                
  795.                         }
  796.                         if(s3num==3)
  797.                         {
  798.                                 write_com (0xc0+0x10+8);
  799.                         }
  800.                         if(s3num==4)
  801.                         {
  802.                                 write_com (0xc0+0x10+5);
  803.                         }

  804.                         if(s3num==5)
  805.                         {
  806.                                 s3num=0;
  807.                                 for(i=0;i<16;i++)
  808.                                 {
  809.                                        
  810.                                         write_com (0x1c);
  811.                                        
  812.                                 }
  813.                                 write_com(0x0c);
  814.                         }
  815.                 }
  816.         }
  817.         shezhinaozhong();
  818. }
  819. void shezhinaozhong()
  820. {
  821.         if(s3num!=0)
  822.         {
  823.                 if(s2==0)
  824.                 {
  825.                         delay_ms(10);
  826.                         buzzer=0;
  827.                         if(s2==0)
  828.                         {   while(!s2);
  829.                                 buzzer=1;
  830.                                 if(s3num==2)
  831.                                 {
  832.                                        
  833.                                         if(Nmiao==0)
  834.                                         {
  835.                                                 Nmiao=60;
  836.                                                
  837.                                                
  838.                                         }
  839.                                         Nmiao--;
  840.                                         write_sfmnaozhong(10,Nmiao);
  841.                                         write_com(0xc0+0x10+11);
  842.                                        
  843.                                 }
  844.                                 if(s3num==3)
  845.                                 {
  846.                                        
  847.                                         if(Nfen==0)
  848.                                         {
  849.                                                 Nfen=60;
  850.                                                
  851.                                                
  852.                                         }
  853.                                         Nfen--;
  854.                                         write_sfmnaozhong(7,Nfen);
  855.                                         write_com(0xc0+0x10+8);
  856.                                 }
  857.                                 if(s3num==4)
  858.                                 {
  859.                                        
  860.                                         if(Nshi==0)
  861.                                         {
  862.                                                 Nshi=24;
  863.                                         }
  864.                                         Nshi--;
  865.                                         write_sfmnaozhong(4,Nshi);
  866.                                         write_com(0xc0+0x10+5);
  867.                                 }

  868.                         }
  869.                 }
  870.         }
  871.         if(s3num!=0)
  872.         {
  873.                 if(s1==0)
  874.                 {
  875.                         delay_ms(10);
  876.                         buzzer=0;
  877.                         if(s1==0)
  878.                         {   while(!s1);
  879.                                 buzzer=1;
  880.                                 if(s3num==2)
  881.                                 {
  882.                                         Nmiao++;
  883.                                         if(Nmiao==60)
  884.                                         {
  885.                                                 Nmiao=0;

  886.                                         }
  887.                                         write_sfmnaozhong(10,Nmiao);
  888.                                         write_com(0xc0+0x10+11);
  889.                                        
  890.                                 }
  891.                                 if(s3num==3)
  892.                                 {
  893.                                         Nfen++;
  894.                                         if(Nfen==60)
  895.                                         {
  896.                                                 Nfen=0;
  897.                                                
  898.                                         }
  899.                                         write_sfmnaozhong(7,Nfen);
  900.                                         write_com(0xc0+0x10+8);
  901.                                 }
  902.                                 if(s3num==4)
  903.                                 {
  904.                                         Nshi++;
  905.                                         if(Nshi==24)
  906.                                         {
  907.                                                 Nshi=0;
  908.                                         }
  909.                                         write_sfmnaozhong(4,Nshi);
  910.                                         write_com(0xc0+0x10+5);
  911.                                 }
  912.                         }
  913.                 }
  914.         }
  915. }

  916. void scan_hwx()
  917. {

  918.         if(ir_ma==0x1c)
  919.         {
  920.                 flag=1;     
  921.                
  922.                 shi=read_ds1302(0x85);
  923.                 fen=read_ds1302(0x83);
  924.                 miao=read_ds1302(0x81);
  925.                 day=read_ds1302(0x87);
  926.                 month=read_ds1302(0x89);
  927.                 year=read_ds1302(0x8d);
  928.                 week=read_ds1302(0x8b);   
  929.                 miao=(miao/16)*10+miao%16;
  930.                 fen=(fen/16)*10+fen%16;
  931.                 shi=(shi/16)*10+shi%16;   
  932.                 day=(day/16)*10+day%16;
  933.                 month=(month/16)*10+month%16;
  934.                 year=(year/16)*10+year%16;
  935.         }
  936.         if((ir_ma==0x0c)&&(flag==1))
  937.         {

  938.                 s0num++;

  939.                 if(s0num==1)
  940.                 {  
  941.                         write_com(0xc0+11);
  942.                         write_com(0x0f);
  943.                 }
  944.                 if(s0num==2)
  945.                 {
  946.                         write_com(0xc0+8);
  947.                 }
  948.                 if(s0num==3)
  949.                 {
  950.                         write_com(0xc0+5);
  951.                 }
  952.                 if(s0num==4)
  953.                 {
  954.                         write_com(0x80+12);
  955.                 }
  956.                 if(s0num==5)
  957.                 {
  958.                         write_com(0x80+10);
  959.                 }
  960.                 if(s0num==6)
  961.                 {
  962.                         write_com(0x80+7);
  963.                 }
  964.                 if(s0num==7)
  965.                 {
  966.                         write_com(0x80+4);
  967.                         s0num=0;
  968.                 }         
  969.         }
  970.         if((ir_ma==0x05)&&(flag==1))
  971.         {
  972.                 s0num--;  
  973.                 if(s0num==1)
  974.                 {  
  975.                         write_com(0xc0+11);
  976.                         write_com(0x0f);
  977.                         s0num=8;
  978.                 }
  979.                 if(s0num==2)
  980.                 {
  981.                         write_com(0xc0+8);
  982.                 }
  983.                 if(s0num==3)
  984.                 {
  985.                         write_com(0xc0+5);
  986.                 }
  987.                 if(s0num==4)
  988.                 {
  989.                         write_com(0x80+12);
  990.                 }
  991.                 if(s0num==5)
  992.                 {
  993.                         write_com(0x80+10);
  994.                 }
  995.                 if(s0num==6)
  996.                 {
  997.                         write_com(0x80+7);
  998.                 }
  999.                 if(s0num==7)
  1000.                 {
  1001.                         write_com(0x80+4);
  1002.                 }
  1003.                
  1004.         }

  1005.        
  1006.        

  1007.         if(s0num!=0)  //减键
  1008.         {
  1009.                 if(ir_ma==0x01)
  1010.                 {
  1011.                         if(s0num==1)
  1012.                         {               
  1013.                                 if(miao==0)
  1014.                                 {         
  1015.                                         miao=60;      
  1016.                                 }
  1017.                                 miao--;   
  1018.                                 write_sfm_10(10,miao);            
  1019.                                 write_com(0xc0+11);      
  1020.                         }
  1021.                         if(s0num==2)
  1022.                         {        
  1023.                                 if(fen==0)
  1024.                                 {
  1025.                                         fen=60;            
  1026.                                 }
  1027.                                 fen--;
  1028.                                 write_sfm_10(7,fen);
  1029.                                 write_com(0xc0+8);
  1030.                         }
  1031.                         if(s0num==3)
  1032.                         {
  1033.                                
  1034.                                 if(shi==0)
  1035.                                 {
  1036.                                         shi=24;
  1037.                                 }
  1038.                                 shi--;
  1039.                                 write_sfm_10(4,shi);
  1040.                                 write_com(0xc0+5);
  1041.                         }
  1042.                         if(s0num==4)
  1043.                         {
  1044.                                 week--;
  1045.                                 if(week==0)
  1046.                                 {
  1047.                                         week=7;
  1048.                                 }
  1049.                                
  1050.                                 write_week(12,week);
  1051.                                 write_com(0x80+12);
  1052.                         }
  1053.                         if(s0num==5)
  1054.                         {
  1055.                                 day--;
  1056.                                 if(year%4==0 && year%100!=0 || year%400==0)
  1057.                                 {
  1058.                                         if(month==2)
  1059.                                         {
  1060.                                                 if(day==0)
  1061.                                                 {
  1062.                                                         day=29;
  1063.                                                 }
  1064.                                         }
  1065.                                 }
  1066.                                 if((year%4!=0 || year%100==0) && year%400!=0)
  1067.                                 {
  1068.                                         if(month==2)
  1069.                                         {
  1070.                                                 if(day==0)
  1071.                                                 {
  1072.                                                         day=28;
  1073.                                                 }
  1074.                                         }
  1075.                                 }
  1076.                                 if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
  1077.                                 {
  1078.                                         if(day==0)
  1079.                                         {
  1080.                                                 day=31;
  1081.                                         }
  1082.                                 }
  1083.                                 if(month==4 || month==6 || month==9 || month==11)
  1084.                                 {
  1085.                                         if(day==0)
  1086.                                         {
  1087.                                                 day=30;
  1088.                                         }
  1089.                                 }                          
  1090.                                 write_nyr_10(9,day);
  1091.                                 write_com(0x80+10);
  1092.                         }
  1093.                         if(s0num==6)
  1094.                         {
  1095.                                 month--;
  1096.                                 if(month==0)
  1097.                                 {
  1098.                                         month=12;
  1099.                                 }
  1100.                                
  1101.                                 write_nyr_10(6,month);
  1102.                                 write_com(0x80+7);
  1103.                         }
  1104.                         if(s0num==7)
  1105.                         {
  1106.                                
  1107.                                 if(year==0)
  1108.                                 {
  1109.                                         year=100;
  1110.                                         qbyear--;
  1111.                                         write_nyr_10(1,qbyear);
  1112.                                 }
  1113.                                 year--;
  1114.                                 write_nyr_10(3,year);
  1115.                                 write_com(0x80+4);
  1116.                         }
  1117.                        
  1118.                 }
  1119.         }

  1120.         if(s0num!=0)   //加键
  1121.         {
  1122.                 if(ir_ma==0x02)
  1123.                 {
  1124.                         if(s0num==1)
  1125.                         {
  1126.                                
  1127.                                 miao++;
  1128.                                
  1129.                                 if(miao==60)
  1130.                                 {
  1131.                                        
  1132.                                         miao=0;
  1133.                                        
  1134.                                 }

  1135.                                 write_sfm_10(10,miao);
  1136.                                
  1137.                                
  1138.                                 write_com(0xc0+11);
  1139.                                
  1140.                         }
  1141.                         if(s0num==2)
  1142.                         {
  1143.                                 fen++;
  1144.                                 if(fen==60)
  1145.                                 {
  1146.                                         fen=0;                               
  1147.                                 }
  1148.                                
  1149.                                 write_sfm_10(7,fen);
  1150.                                 write_com(0xc0+8);
  1151.                         }
  1152.                         if(s0num==3)
  1153.                         {
  1154.                                 shi++;
  1155.                                 if(shi==24)
  1156.                                 {
  1157.                                         shi=0;
  1158.                                 }
  1159.                                
  1160.                                 write_sfm_10(4,shi);
  1161.                                 write_com(0xc0+5);
  1162.                         }
  1163.                         if(s0num==4)
  1164.                         {
  1165.                                
  1166.                                 if(week==7)
  1167.                                 {
  1168.                                         week=0;
  1169.                                 }
  1170.                                 week++;
  1171.                                 write_week(12,week);
  1172.                                 write_com(0x80+12);
  1173.                         }
  1174.                         if(s0num==5)
  1175.                         {
  1176.                                
  1177.                                 if(year%4==0 && year%100!=0 || year%400==0)
  1178.                                 {
  1179.                                         if(month==2)
  1180.                                         {
  1181.                                                 if(day==29)
  1182.                                                 {
  1183.                                                         day=0;
  1184.                                                 }
  1185.                                         }
  1186.                                 }
  1187.                                 if((year%4!=0 || year%100==0) && year%400!=0)
  1188.                                 {
  1189.                                         if(month==2)
  1190.                                         {
  1191.                                                 if(day==28)
  1192.                                                 {
  1193.                                                         day=0;
  1194.                                                 }
  1195.                                         }
  1196.                                 }
  1197.                                 if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
  1198.                                 {
  1199.                                         if(day==31)
  1200.                                         {
  1201.                                                 day=0;
  1202.                                         }
  1203.                                 }
  1204.                                 if(month==4 || month==6 || month==9 || month==11)
  1205.                                 {
  1206.                                         if(day==30)
  1207.                                         {
  1208.                                                 day=0;
  1209.                                         }
  1210.                                 }
  1211.                                
  1212.                                 day++;
  1213.                                
  1214.                                
  1215.                                 write_nyr_10(9,day);
  1216.                                 write_com(0x80+10);
  1217.                         }
  1218.                         if(s0num==6)
  1219.                         {
  1220.                                
  1221.                                 if(month==12)
  1222.                                 {
  1223.                                         month=0;
  1224.                                 }
  1225.                                 month++;
  1226.                                 write_nyr_10(6,month);
  1227.                                 write_com(0x80+7);
  1228.                         }
  1229.                         if(s0num==7)
  1230.                         {
  1231.                                
  1232.                                 if(year==99)
  1233.                                 {
  1234.                                         year=-1;
  1235.                                         qbyear++;
  1236.                                         write_nyr_10(1,qbyear);
  1237.                                 }
  1238.                                 year++;
  1239.                                 write_nyr_10(3,year);
  1240.                                 write_com(0x80+4);
  1241.                         }
  1242.                        
  1243.                 }
  1244.         }
  1245.         if((s0num!=0)&&(ir_ma==0x04))
  1246.         {
  1247.                 s0num=0;

  1248.                 write_com(0x0c);
  1249.                 miao=(miao/10)*16+miao%10;//10进制转16进制
  1250.                 fen=(fen/10)*16+fen%10;
  1251.                 shi=(shi/10)*16+shi%10;
  1252.                 day=(day/10)*16+day%10;
  1253.                 month=(month/10)*16+month%10;
  1254.                 year=(year/10)*16+year%10;

  1255.                 write_ds1302(0x80,miao);
  1256.                 write_ds1302(0x82,fen);
  1257.                 write_ds1302(0x84,shi);
  1258.                 write_ds1302(0x8a,week);
  1259.                 write_ds1302(0x86,day);
  1260.                 write_ds1302(0x88,month);
  1261.                 write_ds1302(0x8c,year);
  1262.                 flag=0;
  1263.         }
  1264. }
  1265. void naozhong_hwx()
  1266. {
  1267.         if(ir_ma==0x4c)
  1268.         {  
  1269.                 uchar i;
  1270.                 flag=1;
  1271.                 biaozhi=1;
  1272.                
  1273.                 for(i=0;i<16;i++)
  1274.                 {
  1275.                         write_com (0x18);
  1276.                        
  1277.                 }
  1278.                
  1279.         }
  1280.         if((biaozhi==1)&&(ir_ma==0x0c))
  1281.         {
  1282.                 s3num++;

  1283.                 if(s3num==1)
  1284.                 {   
  1285.                         write_com (0xc0+0x10+11);
  1286.                         // write_com(0x0f);   
  1287.                        
  1288.                 }
  1289.                 if(s3num==2)
  1290.                 {
  1291.                         write_com (0xc0+0x10+8);
  1292.                 }
  1293.                 if(s3num==3)
  1294.                 {
  1295.                         write_com (0xc0+0x10+5);
  1296.                         s3num=0;
  1297.                 }
  1298.         }
  1299.         if((biaozhi==1)&&(ir_ma==0x05))
  1300.         {
  1301.                 s3num--;
  1302.                 if(s3num==1)
  1303.                 {   
  1304.                         write_com (0xc0+0x10+11);
  1305.                         // write_com(0x0f);
  1306.                         s3num=4;
  1307.                        
  1308.                 }
  1309.                 if(s3num==2)
  1310.                 {
  1311.                         write_com (0xc0+0x10+8);
  1312.                 }
  1313.                 if(s3num==3)
  1314.                 {
  1315.                         write_com (0xc0+0x10+5);
  1316.                        
  1317.                 }

  1318.         }

  1319.         if(s3num!=0)
  1320.         {
  1321.                 if(ir_ma==0x01)
  1322.                 {         
  1323.                         if(s3num==1)
  1324.                         {
  1325.                                
  1326.                                 if(Nmiao==0)
  1327.                                 {
  1328.                                         Nmiao=60;
  1329.                                        
  1330.                                        
  1331.                                 }
  1332.                                 Nmiao--;
  1333.                                 write_sfmnaozhong(10,Nmiao);
  1334.                                 write_com(0xc0+0x10+11);
  1335.                                
  1336.                         }
  1337.                         if(s3num==2)
  1338.                         {
  1339.                                
  1340.                                 if(Nfen==0)
  1341.                                 {
  1342.                                         Nfen=60;
  1343.                                        
  1344.                                        
  1345.                                 }
  1346.                                 Nfen--;
  1347.                                 write_sfmnaozhong(7,Nfen);
  1348.                                 write_com(0xc0+0x10+8);
  1349.                         }
  1350.                         if(s3num==3)
  1351.                         {
  1352.                                
  1353.                                 if(Nshi==0)
  1354.                                 {
  1355.                                         Nshi=24;
  1356.                                 }
  1357.                                 Nshi--;
  1358.                                 write_sfmnaozhong(4,Nshi);
  1359.                                 write_com(0xc0+0x10+5);
  1360.                         }

  1361.                 }
  1362.         }
  1363.         if(s3num!=0)
  1364.         {
  1365.                 if(ir_ma==0x02)
  1366.                 {                        
  1367.                         if(s3num==1)
  1368.                         {
  1369.                                 Nmiao++;
  1370.                                 if(Nmiao==60)
  1371.                                 {
  1372.                                         Nmiao=0;
  1373.                                 }
  1374.                                 write_sfmnaozhong(10,Nmiao);
  1375.                                 write_com(0xc0+0x10+11);
  1376.                                
  1377.                         }
  1378.                         if(s3num==2)
  1379.                         {
  1380.                                 Nfen++;
  1381.                                 if(Nfen==60)
  1382.                                 {
  1383.                                         Nfen=0;
  1384.                                        
  1385.                                 }
  1386.                                 write_sfmnaozhong(7,Nfen);
  1387.                                 write_com(0xc0+0x10+8);
  1388.                         }
  1389.                         if(s3num==3)
  1390.                         {
  1391.                                 Nshi++;
  1392.                                 if(Nshi==24)
  1393.                                 {
  1394.                                         Nshi=0;
  1395.                                 }
  1396.                                 write_sfmnaozhong(4,Nshi);
  1397.                                 write_com(0xc0+0x10+5);
  1398.                         }
  1399.                 }
  1400.         }
  1401.         if((biaozhi==1)&&(ir_ma==0x04))
  1402.         {
  1403.                 uchar i;
  1404.                 s3num=0;
  1405.                 for(i=0;i<16;i++)
  1406.                 {
  1407.                        
  1408.                         write_com (0x1c);
  1409.                        
  1410.                 }
  1411.                 //  write_com(0x0c);
  1412.                 biaozhi=0;
  1413.         }

  1414. }

复制代码
回复

使用道具 举报

ID:130231 发表于 2017-3-16 21:35 | 显示全部楼层
//sbit s7=P0^7;//sbit s3=P0^3;  不就没起作用了。是不是就达到我上述问题效果了  。         
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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