久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3433|回復(fù): 4
收起左側(cè)

Keil C如何將c語(yǔ)言程序分開(kāi) h文件不會(huì)寫(xiě)

[復(fù)制鏈接]
ID:406547 發(fā)表于 2018-10-30 21:14 | 顯示全部樓層 |閱讀模式
像下面的文件,怎么分開(kāi)調(diào)用,h文件不會(huì)寫(xiě)
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcdrs  =P2^0;    //液晶引腳定義
  5. sbit led_cs = P2^1;
  6. sbit lcden  =P2^2;
  7. sbit boom   =P3^0;

  8. sbit key1 = P1^0;
  9. sbit key2 = P1^1;
  10. sbit key3 = P1^2;
  11. sbit keyE = P1^3;
  12. uchar num,key1num,key2num,count,hour,min,sec,day,mon,year,shi,fen,miao,week;
  13. char  ye1,ye2;
  14. uchar code cg_1602[]={
  15.             0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
  16.                 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00,0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,};//"年月日"
  17. include "delay.h"
  18.            void delay(uint xms);
  19. {
  20.        uint i,j;
  21.        for(i=xms;i>0;i--);
  22.        for(j=114;j>0;j--);
  23. }
  24. /*1602液晶*/
  25. void write_com(uchar com)//寫(xiě)命令
  26. {
  27.        lcdrs=0;      //RS=0,輸入指令
  28.        lcden=0;      //E=0
  29.        P0=com;
  30.        delay(5);
  31.        lcden=1;      //E=1時(shí),讀取信息
  32.        delay(5);
  33.        lcden=0;      //E=1—0時(shí),下降沿,執(zhí)行指令
  34. }
  35. void write_data(uchar date)  //寫(xiě)數(shù)據(jù)
  36. {
  37.        lcdrs=1;      //RS=1,輸入數(shù)據(jù)
  38.        lcden=0;      //E=0
  39.        P0=date;
  40.        delay(5);
  41.        lcden=1;
  42.        delay(5);
  43.        lcden=0;
  44. }
  45. void write_by_xy(uchar x,uchar y)//坐標(biāo)定位
  46. {
  47.        uchar address;
  48.        if(y==0)
  49.        address=0x80+x;//y=0,第一行
  50.        else
  51.        address=0xc0+x;//y=1,第二行
  52.        write_com(address);
  53. }

  54. void write_string(uchar x,uchar y,uchar *s)//寫(xiě)字符串
  55. {
  56.        write_by_xy(x,y);//設(shè)定顯示位置
  57.        while(*s)//writecharacter
  58.        {
  59.        P0=*s;
  60.        write_data(*s);
  61.        s++;
  62.        }
  63. }
  64. void write_sfm(uchar add,uchar date)//寫(xiě)時(shí)分秒函數(shù)
  65. {
  66.        uchar hour,ge;
  67.        hour=date/10;//分解一個(gè)2位數(shù)的十位和個(gè)位
  68.        ge=date%10;
  69.        write_com(0x80+add);//設(shè)置顯示位置
  70.        write_data(0x30+hour);//送去液晶顯示十位
  71.        write_data(0x30+ge);//送去液晶顯示個(gè)位
  72. }
  73. void write_cg()//寫(xiě)入固定漢字和符號(hào)
  74. {
  75.        write_com(0x40);//設(shè)定CGRAM地址
  76.        for(num=0;num<24;num++)//將自定義字型碼寫(xiě)入CGRAM中
  77.        {
  78.               write_data(cg_1602[num]);
  79.        }
  80.        write_com(0xc4);//年
  81.        {
  82.               write_data(0);
  83.        }
  84.        write_com(0xc7);//月
  85.        {
  86.               write_data(1);
  87.        }
  88.        write_com(0xca);//日
  89.        {
  90.               write_data(2);
  91.        }
  92.        write_string(2,0,":");
  93.        write_string(5,0,":");
  94.        write_string(0x0a,0,":");
  95.        write_string(0x0d,0,":");
  96.        write_string(0x0c,1,"W");
  97.        write_string(0x0d,1,"K");
  98. }
  99. void init_1602()//初始化
  100. {
  101.        led_cs=0;
  102. hour=8;min=59;sec=55;key1num=0;count=0;
  103. day=26;mon=10;ye1=20;ye2=18;year=ye1*100+ye2;
  104. boom=0;shi=9;fen=00;miao=0;week=7;
  105.        write_com(0x38);
  106.        write_com(0x0c);
  107.        write_com(0x06);
  108.        write_com(0x01);
  109.        write_string(0,1,"2018");
  110.        write_string(5,1,"10");
  111.        write_string(8,1,"26");
  112.        write_sfm(8,shi);
  113.        write_sfm(0x0b,fen);
  114.        write_sfm(0x0e,miao);
  115.        write_sfm(0,hour);
  116.        write_sfm(3,min);
  117.        write_sfm(6,sec);
  118.        write_sfm(0x48,day);
  119.        write_sfm(0x45,mon);
  120.        write_sfm(0x40,ye1);
  121.        write_sfm(0x42,ye2);
  122.        write_sfm(0x4e,week);
  123.        write_cg();
  124.        TMOD=0x01;//設(shè)置定時(shí)器0工作模式1
  125.        TH0=(65536-50000)/256;//定時(shí)器裝初值
  126.        TL0=(65536-50000)%256;
  127.        EA=1; //開(kāi)總中斷
  128.        ET0=1; //開(kāi)定時(shí)器0中斷
  129.        TR0=1; //啟動(dòng)定時(shí)器0
  130. }
  131. /*鍵盤(pán)掃描函數(shù)*/
  132. void keyscan()//按鍵掃描函數(shù)
  133. {
  134.        //keyE =0;
  135.        if(key1==0)
  136.        {
  137.               delay(5);
  138.               if(key1==0)//確認(rèn)功能鍵被按下
  139.               {   
  140.                      key1num++;//功能鍵按下次數(shù)記錄
  141.                      while(!key1);//釋放確認(rèn)
  142.                      if(key1num==1)//第一次被按下時(shí)
  143.                      {
  144.                             TR0=0;//關(guān)閉定時(shí)器
  145.                             write_com(0x80+7);//光標(biāo)定位到秒位置
  146.                             write_com(0x0f);//光標(biāo)開(kāi)始閃爍
  147.                      }
  148.                      if(key1num==2)//第二次按下光標(biāo)閃爍定位到分鐘位置
  149.                      {
  150.                             write_com(0x80+4);
  151.                      }
  152.                      if(key1num==3)//第三次按下光標(biāo)閃爍定位到小時(shí)位置
  153.                      {
  154.                             write_com(0x80+1);
  155.                      }
  156.                      if(key1num==4)//第四次按下光標(biāo)閃爍定位到日位置
  157.                      {
  158.                             write_com(0x80+0x49);
  159.                      }
  160.                      if(key1num==5)//第五次按下光標(biāo)閃爍定位到月位置
  161.                      {
  162.                             write_com(0x80+0x46);
  163.                      }
  164.                      if(key1num==6)//第六次按下光標(biāo)閃爍定位到年2位置
  165.                      {
  166.                             write_com(0x80+0x43);
  167.                      }
  168.                      if(key1num==7)//第七次按下光標(biāo)閃爍定位到年1位置
  169.                      {
  170.                             write_com(0x80+0x41);
  171.                      }
  172.                      if(key1num==8)//第八次按下光標(biāo)閃爍定位到星期位置
  173.                      {
  174.                             write_com(0x80+0x4f);
  175.                      }
  176.                      if(key1num==9)//第九次按下
  177.                      {
  178.                             key1num=0;//記錄按鍵數(shù)清零
  179.                             write_com(0x0c);//取消光標(biāo)閃爍
  180.                             TR0=1;//啟動(dòng)定時(shí)器使時(shí)鐘開(kāi)始走
  181.                      }
  182.               }
  183.        }
  184.        if(key1num!=0)//只有功能鍵被按下后,增加和減小鍵才有效
  185.        {
  186.               if(key2==0)
  187.               {
  188.                      delay(5);
  189.                      if(key2==0)//增加鍵確認(rèn)被按下
  190.                      {
  191.                             while(!key2);//按鍵釋放
  192.                             if(key1num==1)//若功能鍵第一次按下
  193.                             {
  194.                                    sec++;//則調(diào)整秒加1
  195.                                    if(sec==60)//若滿60后將清零
  196.                                    sec=0;
  197.                                    write_sfm(6,sec);//每調(diào)節(jié)一次送液晶顯示一下
  198.                                    write_com(0x80+7);//顯示位置重新回到調(diào)節(jié)處
  199.                             }
  200.                             if(key1num==2)//若功能鍵第二次按下
  201.                             {
  202.                                    min++;//則調(diào)整分鐘加1
  203.                                    if(min==60)//若滿60后將清零
  204.                                    min=0;
  205.                                    write_sfm(3,min);//每調(diào)節(jié)一次送液晶顯示一下
  206.                                    write_com(0x80+4);//顯示位置重新回到調(diào)節(jié)處
  207.                             }
  208.                             if(key1num==3)//若功能鍵第三次按下
  209.                             {
  210.                                    hour++;//則調(diào)整小時(shí)加1
  211.                                    if(hour==24)//若滿24后將清零
  212.                                    hour=0;
  213.                                    write_sfm(0,hour);;//每調(diào)節(jié)一次送液晶顯示一下
  214.                                    write_com(0x80+1);//顯示位置重新回到調(diào)節(jié)處
  215.                             }
  216.                             if(key1num==4)//若功能鍵第四次按下
  217.                             {
  218.                                    day++;//則調(diào)整日加1
  219.                                    if(day>31)//若大于31后將置一
  220.                                    day=1;
  221.                                    write_sfm(0x48,day);//每調(diào)節(jié)一次送液晶顯示一下
  222.                                    write_com(0x80+0x48);//顯示位置重新回到調(diào)節(jié)處
  223.                             }
  224.                             if(key1num==5)//若功能鍵第五次按下
  225.                             {
  226.                                    mon++;//則調(diào)整月加1
  227.                                    if(mon>12)//若大于12后將置一
  228.                                    mon=1;
  229.                                    write_sfm(0x45,mon);//每調(diào)節(jié)一次送液晶顯示一下
  230.                                    write_com(0x80+0x45);//顯示位置重新回到調(diào)節(jié)處
  231.                             }
  232.                             if(key1num==6)//若功能鍵第六次按下
  233.                             {
  234.                                    ye2++;//則調(diào)整年加1
  235.                                    if(ye2==0x0a)//若滿99后將清零
  236.                                    ye2=0;
  237.                                    year=ye1*100+ye2;
  238.                                    write_sfm(0x42,ye2);//每調(diào)節(jié)一次送液晶顯示一下
  239.                                    write_com(0x80+0x42);//顯示位置重新回到調(diào)節(jié)處
  240.                             }
  241.                             if(key1num==7)//若功能鍵第七次按下
  242.                             {
  243.                                    ye1++;//則調(diào)整年加100
  244.                                    if(ye1==0x0a)//若滿99后將清零
  245.                                    ye1=0;
  246.                                    year=ye1*100+ye2;
  247.                                    write_sfm(0x40,ye1);//每調(diào)節(jié)一次送液晶顯示一下
  248.                                    write_com(0x80+0x40);//顯示位置重新回到調(diào)節(jié)處
  249.                             }
  250.                             if(key1num==8)//若功能鍵第八次按下
  251.                             {
  252.                                    week++;//則調(diào)整周加一
  253.                                    if(week>7)//若大于7后置一
  254.                                    week=1;
  255.                                    write_sfm(0x4f,week);//每調(diào)節(jié)一次送液晶顯示一下
  256.                                    write_com(0x80+0x4f);//顯示位置重新回到調(diào)節(jié)處
  257.                             }
  258.                      }
  259.               }
  260.               if(key3==0)
  261.               {
  262.                      delay(5);
  263.                      if(key3==0)//確認(rèn)減小鍵被按下
  264.                      {
  265.                             while(!key3);//按鍵釋放
  266.                             if(key1num==1)//若功能鍵第一次按下
  267.                             {
  268.                                    sec--;//則調(diào)整秒減1
  269.                                    if(sec==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59
  270.                                           sec=59;
  271.                                    write_sfm(6,sec);//每調(diào)節(jié)一次送液晶顯示一下
  272.                                    write_com(0x80+7);//顯示位置重新回到調(diào)節(jié)處
  273.                             }
  274.                             if(key1num==2)//若功能鍵第二次按下
  275.                             {
  276.                                    min--;//則調(diào)整分鐘減1
  277.                                    if(min==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59
  278.                                           min=59;
  279.                                    write_sfm(3,min);//每調(diào)節(jié)一次送液晶顯示一下
  280.                             write_com(0x80+4);//顯示位置重新回到調(diào)節(jié)處
  281.                             }
  282.                             if(key1num==3)//若功能鍵第三次按下
  283.                             {
  284.                                    hour--;//則調(diào)整小時(shí)減1
  285.                                    if(hour==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為23
  286.                                           hour=23;
  287.                                    write_sfm(0,hour);//每調(diào)節(jié)一次送液晶顯示一下
  288.                                    write_com(0x80+1);//顯示位置重新回到調(diào)節(jié)處
  289.                             }
  290.                             if(key1num==4)//若功能鍵第四次按下
  291.                             {
  292.                                    day--;//則調(diào)整日減1
  293.                                    if(day==0)//若日為零時(shí)將置一
  294.                                    day=31;
  295.                                    write_sfm(0x48,day);//每調(diào)節(jié)一次送液晶顯示一下
  296.                                    write_com(0x80+0x49);//顯示位置重新回到調(diào)節(jié)處
  297.                             }
  298.                             if(key1num==5)//若功能鍵第五次按下
  299.                             {
  300.                                    mon--;//則調(diào)整月減1
  301.                                    if(mon==0)//若月為零將置一
  302.                                    mon=12;
  303.                                    write_sfm(0x45,mon);//每調(diào)節(jié)一次送液晶顯示一下
  304.                                    write_com(0x80+0x45);//顯示位置重新回到調(diào)節(jié)處
  305.                             }
  306.                             if(key1num==6)//若功能鍵第六次按下
  307.                             {
  308.                                    ye2--;//則調(diào)整年減1
  309.                                    if(ye2<0)//若小于零后將設(shè)置為99
  310.                                    ye2=99;
  311.                                    year=ye1*100+ye2;
  312.                                    write_sfm(0x42,ye2);//每調(diào)節(jié)一次送液晶顯示一下
  313.                                    write_com(0x80+0x42);//顯示位置重新回到調(diào)節(jié)處
  314.                             }
  315.                             if(key1num==7)//若功能鍵第七次按下
  316.                             {
  317.                                    ye1--;//則調(diào)整年減100
  318.                                    if(ye1<0)//若小于零后將設(shè)置為99
  319.                                    ye1=99;
  320.                                    year=ye1*100+ye2;
  321.                                    write_sfm(0x40,ye1);//每調(diào)節(jié)一次送液晶顯示一下
  322.                                    write_com(0x80+0x40);//顯示位置重新回到調(diào)節(jié)處
  323.                             }
  324.                             if(key1num==8)//若功能鍵第八次按下
  325.                             {
  326.                                    week--;//則調(diào)整周減一
  327.                                    if(week==0)//若等于0后將置7
  328.                                    week=7;
  329.                                    write_sfm(0x4f,week);//每調(diào)節(jié)一次送液晶顯示一下
  330.                                    write_com(0x80+0x4f);//顯示位置重新回到調(diào)節(jié)處
  331.                             }
  332.                      }
  333.               }
  334.        }
  335.        if(keyE==0)
  336.        {
  337.               delay(5);
  338.               if(keyE==0)//確認(rèn)功能鍵被按下
  339.               {   
  340.                      key2num++;//功能鍵按下次數(shù)記錄
  341.                      while(!keyE);//釋放確認(rèn)
  342.                      if(key2num==1)//第一次被按下時(shí)
  343.                      {
  344.                             TR0=0;//關(guān)閉定時(shí)器
  345.                             write_com(0x80+0x0f);//光標(biāo)定位到秒位置
  346.                             write_com(0x0f);//光標(biāo)開(kāi)始閃爍
  347.                      }
  348.                      if(key2num==2)//第二次按下光標(biāo)閃爍定位到分鐘位置
  349.                      {
  350.                             write_com(0x80+0x0c);
  351.                      }
  352.                      if(key2num==3)//第三次按下光標(biāo)閃爍定位到小時(shí)位置
  353.                      {
  354.                             write_com(0x80+9);
  355.                      }
  356.                      if(key2num==4)//第八次按下
  357.                      {
  358.                             key2num=0;//記錄按鍵數(shù)清零
  359.                             write_com(0x0c);//取消光標(biāo)閃爍
  360.                             TR0=1;//啟動(dòng)定時(shí)器使時(shí)鐘開(kāi)始走
  361.                      }
  362.                      }
  363.                      }
  364.               if(key2num!=0)//只有功能鍵被按下后,增加和減小鍵才有效
  365.        {
  366.               if(key2==0)
  367.               {
  368.                      delay(5);
  369.                      if(key2==0)//增加鍵確認(rèn)被按下
  370.                      {
  371.                             while(!key2);//按鍵釋放
  372.                             if(key2num==1)//若功能鍵第一次按下
  373.                             {
  374.                                    miao++;//則調(diào)整秒加1
  375.                                    if(miao==60)//若滿60后將清零
  376.                                    miao=0;
  377.                                    write_sfm(0x0e,miao);//每調(diào)節(jié)一次送液晶顯示一下
  378.                                    write_com(0x80+0x0e);//顯示位置重新回到調(diào)節(jié)處
  379.                             }
  380.                             if(key2num==2)//若功能鍵第二次按下
  381.                             {
  382.                                    fen++;//則調(diào)整分鐘加1
  383.                                    if(fen==60)//若滿60后將清零
  384.                                    fen=0;
  385.                                    write_sfm(0x0b,fen);//每調(diào)節(jié)一次送液晶顯示一下
  386.                                    write_com(0x80+0x0b);//顯示位置重新回到調(diào)節(jié)處
  387.                             }
  388.                             if(key2num==3)//若功能鍵第三次按下
  389.                             {
  390.                                    shi++;//則調(diào)整小時(shí)加1
  391.                                    if(shi==24)//若滿24后將清零
  392.                                    shi=0;
  393.                                    write_sfm(8,shi);;//每調(diào)節(jié)一次送液晶顯示一下
  394.                                    write_com(0x80+8);//顯示位置重新回到調(diào)節(jié)處
  395.                             }
  396.                      }
  397.               }
  398.               if(key3==0)
  399.               {
  400.                      delay(5);
  401.                      if(key3==0)//確認(rèn)減小鍵被按下
  402.                      {
  403.                             while(!key3);//按鍵釋放
  404.                             if(key2num==1)//若功能鍵第一次按下
  405.                             {
  406.                                    miao--;//則調(diào)整秒減1
  407.                                    if(miao==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59
  408.                                           miao=59;
  409.                                    write_sfm(0x0e,miao);//每調(diào)節(jié)一次送液晶顯示一下
  410.                                    write_com(0x80+0x0e);//顯示位置重新回到調(diào)節(jié)處
  411.                             }
  412.                             if(key2num==2)//若功能鍵第二次按下
  413.                             {
  414.                                    fen--;//則調(diào)整分鐘減1
  415.                                    if(fen==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59
  416.                                           fen=59;
  417.                                    write_sfm(0x0b,fen);//每調(diào)節(jié)一次送液晶顯示一下
  418.                             write_com(0x80+0x0b);//顯示位置重新回到調(diào)節(jié)處
  419.                             }
  420.                             if(key2num==3)//若功能鍵第三次按下
  421.                             {
  422.                                    shi--;//則調(diào)整小時(shí)減1
  423.                                    if(shi==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為23
  424.                                           shi=23;
  425.                                    write_sfm(8,shi);//每調(diào)節(jié)一次送液晶顯示一下
  426.                                    write_com(0x80+8);//顯示位置重新回到調(diào)節(jié)處
  427.                             }
  428.                      }
  429.                      }
  430.                      }
  431. }
  432. /*主函數(shù)*/
  433. void main()
  434. {
  435.        led_cs=0;
  436.        init_1602();
  437.        while(1)
  438.        {
  439.               keyscan();
  440.        }

  441. }
  442. /*中斷函數(shù)*/
  443. void timer0() interrupt 1//定時(shí)器0中斷服務(wù)程序
  444. {
  445.        TH0=(65536-50000)/256;//再次裝定時(shí)器初值
  446.        TL0=(65536-50000)%256;
  447.        count++;//中斷次數(shù)累加
  448.        if(count==20)//20次50毫秒為1秒
  449.        {
  450.               count=0;
  451.               sec++;
  452.               if(sec==60)//秒加到60則進(jìn)位分鐘
  453.               {
  454.                      sec=0;//同時(shí)秒數(shù)清零
  455.                      min++;
  456.                      if(min==60)//分鐘加到60則進(jìn)位小時(shí)
  457.                      {
  458.                             min=0;//同時(shí)分鐘數(shù)清零
  459.                             hour++;
  460.                             //boom=1;
  461.                             //delay(5);
  462.                             //boom=0;
  463.                             if(hour==24)//小時(shí)加到24則小時(shí)清零
  464.                             {
  465.                                    hour=0;
  466.                                    day++;
  467.                                    week++;
  468.                                    if(week>7)
  469.                                    {
  470.                                    week=1;
  471.                                    }
  472.                                    if(mon==1)
  473.                                    {
  474.                                     if(day>31)
  475.                                     {
  476.                                     day=1;
  477.                                     mon++;
  478.                                     }
  479.                                     }
  480.                                     if(mon==2)
  481.                                    {
  482.                                     if((year%4==0 &&year%100!=0)||year%4==0)
  483.                                     {
  484.                                     if(day>29)
  485.                                     {
  486.                                     day=1;
  487.                                     mon++;
  488.                                     }
  489.                                     }
  490.                                     else if(day>28)
  491.                                     {
  492.                                     day=1;
  493.                                     mon++;
  494.                                     }
  495.                                     }
  496.                                     if(mon==3)
  497.                                    {
  498.                                     if(day>31)
  499.                                     {
  500.                                     day=1;
  501.                                     mon++;
  502.                                     }
  503.                                     }
  504.                                     if(mon==4)
  505.                                    {
  506.                                     if(day>30)
  507.                                     {
  508.                                     day=1;
  509.                                     mon++;
  510.                                     }
  511.                                     }
  512.                                     if(mon==5)
  513.                                    {
  514.                                     if(day>31)
  515.                                     {
  516.                                     day=1;
  517.                                     mon++;
  518.                                     }
  519.                                     }
  520.                                     if(mon==6)
  521.                                    {
  522.                                     if(day>30)
  523.                                     {
  524.                                     day=1;
  525.                                     mon++;
  526.                                     }
  527.                                     }
  528.                                     if(mon==7)
  529.                                    {
  530.                                     if(day>31)
  531.                                     {
  532.                                     day=1;
  533.                                     mon++;
  534.                                     }
  535.                                     }
  536.                                     if(mon==8)
  537.                                    {
  538.                                     if(day>31)
  539.                                     {
  540.                                     day=1;
  541.                                     mon++;
  542.                                     }
  543.                                     }if(mon==9)
  544.                                    {
  545.                                     if(day>30)
  546.                                     {
  547.                                     day=1;
  548.                                     mon++;
  549.                                     }
  550.                                     }
  551.                                     if(mon==10)
  552.                                    {
  553.                                     if(day>31)
  554.                                     {
  555.                                     day=1;
  556.                                     mon++;
  557.                                     }
  558.                                     }
  559.                                     if(mon==11)
  560.                                    {
  561.                                     if(day>30)
  562.                                     {
  563.                                     day=1;
  564.                                     mon++;
  565.                                     }
  566.                                     }
  567.                                     if(mon==12)
  568.                                    {
  569.                                     if(day>31)
  570.                                     {
  571.                                     day=1;
  572.                                     mon=1;
  573.                                     ye2++;
  574.                                     }
  575.                                     }
  576.                                     }
  577.                                     write_sfm(0x4e,week);
  578.                                     write_sfm(0x48,day);
  579.                                     write_sfm(0x45,mon);
  580.                         write_sfm(0x40,ye1);
  581.                                     write_sfm(0x42,ye2);
  582.                             }
  583.                             write_sfm(0,hour);//小時(shí)若變化則重新寫(xiě)入
  584.                      }
  585.                      write_sfm(3,min);//分鐘若變化則重新寫(xiě)入
  586.               }
  587.               write_sfm(6,sec);//秒若變化則重新寫(xiě)入
  588.                      if((hour==shi&& min==fen) && sec==miao)
  589.        {
  590.               boom=1;
  591.               delay(50);
  592.               boom=0;
  593.        }
  594.        }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-10-31 08:19 | 顯示全部樓層
多看例子哦。
給你一個(gè)含頭文件的例子:LCD1602的顯示程序,你可以學(xué)習(xí)頭文件怎么寫(xiě)。
主程序:
#include<reg51.h>       
#include"lcd.h"

unsigned char PuZh[]=" Pechin Science ";

void main(void)
{
        unsigned char i;
        LcdInit();
        for(i=0;i<16;i++)
        {
                LcdWriteData(PuZh[i]);       
        }
        while(1)
        {
        }                               
}


LCD的C文件:
#include"lcd.h"

void Lcd1602_Delay1ms(uint c)   //誤差 0us
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
}

#ifndef         LCD1602_4PINS         //當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí)
void LcdWriteCom(uchar com)          //寫(xiě)入命令
{
        LCD1602_E = 0;     //使能
        LCD1602_RS = 0;           //選擇發(fā)送命令
        LCD1602_RW = 0;           //選擇寫(xiě)入
       
        LCD1602_DATAPINS = com;     //放入命令
        Lcd1602_Delay1ms(1);                //等待數(shù)據(jù)穩(wěn)定

        LCD1602_E = 1;                  //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);          //保持時(shí)間
        LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)          //寫(xiě)入命令
{
        LCD1602_E = 0;         //使能清零
        LCD1602_RS = 0;         //選擇寫(xiě)入命令
        LCD1602_RW = 0;         //選擇寫(xiě)入

        LCD1602_DATAPINS = com;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;         //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

//        Lcd1602_Delay1ms(1);
        LCD1602_DATAPINS = com << 4; //發(fā)送低四位
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;         //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif

#ifndef         LCD1602_4PINS                  
void LcdWriteData(uchar dat)                        //寫(xiě)入數(shù)據(jù)
{
        LCD1602_E = 0;        //使能清零
        LCD1602_RS = 1;        //選擇輸入數(shù)據(jù)
        LCD1602_RW = 0;        //選擇寫(xiě)入

        LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù)
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;   //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);   //保持時(shí)間
        LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)                        //寫(xiě)入數(shù)據(jù)
{
        LCD1602_E = 0;          //使能清零
        LCD1602_RS = 1;          //選擇寫(xiě)入數(shù)據(jù)
        LCD1602_RW = 0;          //選擇寫(xiě)入

        LCD1602_DATAPINS = dat;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;          //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

        LCD1602_DATAPINS = dat << 4; //寫(xiě)入低四位
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;          //寫(xiě)入時(shí)序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif

#ifndef                LCD1602_4PINS
void LcdInit()                                                  //LCD初始化子程序
{
        LcdWriteCom(0x38);  //開(kāi)顯示
        LcdWriteCom(0x0c);  //開(kāi)顯示不顯示光標(biāo)
        LcdWriteCom(0x06);  //寫(xiě)一個(gè)指針加1
        LcdWriteCom(0x01);  //清屏
        LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
}
#else
void LcdInit()                                                  //LCD初始化子程序
{
        LcdWriteCom(0x32);         //將8位總線轉(zhuǎn)為4位總線
        LcdWriteCom(0x28);         //在四位線下的初始化
        LcdWriteCom(0x0c);  //開(kāi)顯示不顯示光標(biāo)
        LcdWriteCom(0x06);  //寫(xiě)一個(gè)指針加1
        LcdWriteCom(0x01);  //清屏
        LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
}
#endif


LCD的頭文件:
#ifndef __LCD_H_
#define __LCD_H_
#define LCD1602_4PINS

#include<reg51.h>

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

/*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/
void Lcd1602_Delay1ms(uint c);   //誤差 0us
/*LCD1602寫(xiě)入8位命令子函數(shù)*/
void LcdWriteCom(uchar com);
/*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/       
void LcdWriteData(uchar dat)        ;
/*LCD1602初始化子程序*/               
void LcdInit();                                                  

#endif


回復(fù)

使用道具 舉報(bào)

ID:418352 發(fā)表于 2018-10-31 10:01 | 顯示全部樓層
h文件是保存的話直接加個(gè).h,如果要寫(xiě)h文件的話有開(kāi)頭和結(jié)尾的固定格式,下面這個(gè)為參考,KEY是按鍵
#ifndef  __key_H__
#define  __key_H__

#include <reg52.h>

extern int HNUM;
extern int LNUM;


unsigned char key_scan(void);
void key_proc(unsigned char value);
void delayms(unsigned int ms);

#endif
回復(fù)

使用道具 舉報(bào)

ID:418357 發(fā)表于 2018-10-31 10:07 | 顯示全部樓層
要多寫(xiě)幾個(gè)C文件,要不可讀性太差了
回復(fù)

使用道具 舉報(bào)

ID:415088 發(fā)表于 2018-10-31 10:59 | 顯示全部樓層
#ifndef
#define


#endif
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男女午夜免费视频 | av激情影院| 久久精品国产免费一区二区三区 | 欧美国产精品一区二区三区 | 国产99精品 | 在线免费观看成人 | 国产精品久久久亚洲 | 少妇久久久 | 一级a性色生活片久久毛片波多野 | 久久亚洲高清 | 亚洲一区在线免费观看 | 国产在线视频一区二区 | 中文字幕 国产 | 成人午夜网站 | 国产亚洲黄色片 | 欧美精品在线播放 | 国产精品久久久久久久久 | 不卡在线视频 | 99久久精品免费看国产小宝寻花 | 亚洲男人天堂2024 | 中文字幕的av | 日韩精品成人 | 成人精品一区二区三区 | 在线免费观看视频黄 | 亚洲美女网站 | 久久爱综合 | 99热精品在线观看 | 中文字幕国产一区 | 在线视频 欧美日韩 | 91精品国产综合久久精品 | 欧美黄色一区 | 夜夜操操操 | 国内精品一区二区 | 欧美大片一区二区 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 一级黄色网页 | 欧美一区二区网站 | 免费一区二区三区 | 国产精品视频一区二区三区 | 亚洲成人网在线播放 | 在线中文字幕视频 |