找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2930|回复: 4
收起左侧

Keil C如何将c语言程序分开 h文件不会写

[复制链接]
ID:406547 发表于 2018-10-30 21:14 | 显示全部楼层 |阅读模式
像下面的文件,怎么分开调用,h文件不会写
  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)//写命令
  26. {
  27.        lcdrs=0;      //RS=0,输入指令
  28.        lcden=0;      //E=0
  29.        P0=com;
  30.        delay(5);
  31.        lcden=1;      //E=1时,读取信息
  32.        delay(5);
  33.        lcden=0;      //E=1—0时,下降沿,执行指令
  34. }
  35. void write_data(uchar date)  //写数据
  36. {
  37.        lcdrs=1;      //RS=1,输入数据
  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)//坐标定位
  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)//写字符串
  55. {
  56.        write_by_xy(x,y);//设定显示位置
  57.        while(*s)//writecharacter
  58.        {
  59.        P0=*s;
  60.        write_data(*s);
  61.        s++;
  62.        }
  63. }
  64. void write_sfm(uchar add,uchar date)//写时分秒函数
  65. {
  66.        uchar hour,ge;
  67.        hour=date/10;//分解一个2位数的十位和个位
  68.        ge=date%10;
  69.        write_com(0x80+add);//设置显示位置
  70.        write_data(0x30+hour);//送去液晶显示十位
  71.        write_data(0x30+ge);//送去液晶显示个位
  72. }
  73. void write_cg()//写入固定汉字和符号
  74. {
  75.        write_com(0x40);//设定CGRAM地址
  76.        for(num=0;num<24;num++)//将自定义字型码写入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;//设置定时器0工作模式1
  125.        TH0=(65536-50000)/256;//定时器装初值
  126.        TL0=(65536-50000)%256;
  127.        EA=1; //开总中断
  128.        ET0=1; //开定时器0中断
  129.        TR0=1; //启动定时器0
  130. }
  131. /*键盘扫描函数*/
  132. void keyscan()//按键扫描函数
  133. {
  134.        //keyE =0;
  135.        if(key1==0)
  136.        {
  137.               delay(5);
  138.               if(key1==0)//确认功能键被按下
  139.               {   
  140.                      key1num++;//功能键按下次数记录
  141.                      while(!key1);//释放确认
  142.                      if(key1num==1)//第一次被按下时
  143.                      {
  144.                             TR0=0;//关闭定时器
  145.                             write_com(0x80+7);//光标定位到秒位置
  146.                             write_com(0x0f);//光标开始闪烁
  147.                      }
  148.                      if(key1num==2)//第二次按下光标闪烁定位到分钟位置
  149.                      {
  150.                             write_com(0x80+4);
  151.                      }
  152.                      if(key1num==3)//第三次按下光标闪烁定位到小时位置
  153.                      {
  154.                             write_com(0x80+1);
  155.                      }
  156.                      if(key1num==4)//第四次按下光标闪烁定位到日位置
  157.                      {
  158.                             write_com(0x80+0x49);
  159.                      }
  160.                      if(key1num==5)//第五次按下光标闪烁定位到月位置
  161.                      {
  162.                             write_com(0x80+0x46);
  163.                      }
  164.                      if(key1num==6)//第六次按下光标闪烁定位到年2位置
  165.                      {
  166.                             write_com(0x80+0x43);
  167.                      }
  168.                      if(key1num==7)//第七次按下光标闪烁定位到年1位置
  169.                      {
  170.                             write_com(0x80+0x41);
  171.                      }
  172.                      if(key1num==8)//第八次按下光标闪烁定位到星期位置
  173.                      {
  174.                             write_com(0x80+0x4f);
  175.                      }
  176.                      if(key1num==9)//第九次按下
  177.                      {
  178.                             key1num=0;//记录按键数清零
  179.                             write_com(0x0c);//取消光标闪烁
  180.                             TR0=1;//启动定时器使时钟开始走
  181.                      }
  182.               }
  183.        }
  184.        if(key1num!=0)//只有功能键被按下后,增加和减小键才有效
  185.        {
  186.               if(key2==0)
  187.               {
  188.                      delay(5);
  189.                      if(key2==0)//增加键确认被按下
  190.                      {
  191.                             while(!key2);//按键释放
  192.                             if(key1num==1)//若功能键第一次按下
  193.                             {
  194.                                    sec++;//则调整秒加1
  195.                                    if(sec==60)//若满60后将清零
  196.                                    sec=0;
  197.                                    write_sfm(6,sec);//每调节一次送液晶显示一下
  198.                                    write_com(0x80+7);//显示位置重新回到调节处
  199.                             }
  200.                             if(key1num==2)//若功能键第二次按下
  201.                             {
  202.                                    min++;//则调整分钟加1
  203.                                    if(min==60)//若满60后将清零
  204.                                    min=0;
  205.                                    write_sfm(3,min);//每调节一次送液晶显示一下
  206.                                    write_com(0x80+4);//显示位置重新回到调节处
  207.                             }
  208.                             if(key1num==3)//若功能键第三次按下
  209.                             {
  210.                                    hour++;//则调整小时加1
  211.                                    if(hour==24)//若满24后将清零
  212.                                    hour=0;
  213.                                    write_sfm(0,hour);;//每调节一次送液晶显示一下
  214.                                    write_com(0x80+1);//显示位置重新回到调节处
  215.                             }
  216.                             if(key1num==4)//若功能键第四次按下
  217.                             {
  218.                                    day++;//则调整日加1
  219.                                    if(day>31)//若大于31后将置一
  220.                                    day=1;
  221.                                    write_sfm(0x48,day);//每调节一次送液晶显示一下
  222.                                    write_com(0x80+0x48);//显示位置重新回到调节处
  223.                             }
  224.                             if(key1num==5)//若功能键第五次按下
  225.                             {
  226.                                    mon++;//则调整月加1
  227.                                    if(mon>12)//若大于12后将置一
  228.                                    mon=1;
  229.                                    write_sfm(0x45,mon);//每调节一次送液晶显示一下
  230.                                    write_com(0x80+0x45);//显示位置重新回到调节处
  231.                             }
  232.                             if(key1num==6)//若功能键第六次按下
  233.                             {
  234.                                    ye2++;//则调整年加1
  235.                                    if(ye2==0x0a)//若满99后将清零
  236.                                    ye2=0;
  237.                                    year=ye1*100+ye2;
  238.                                    write_sfm(0x42,ye2);//每调节一次送液晶显示一下
  239.                                    write_com(0x80+0x42);//显示位置重新回到调节处
  240.                             }
  241.                             if(key1num==7)//若功能键第七次按下
  242.                             {
  243.                                    ye1++;//则调整年加100
  244.                                    if(ye1==0x0a)//若满99后将清零
  245.                                    ye1=0;
  246.                                    year=ye1*100+ye2;
  247.                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  248.                                    write_com(0x80+0x40);//显示位置重新回到调节处
  249.                             }
  250.                             if(key1num==8)//若功能键第八次按下
  251.                             {
  252.                                    week++;//则调整周加一
  253.                                    if(week>7)//若大于7后置一
  254.                                    week=1;
  255.                                    write_sfm(0x4f,week);//每调节一次送液晶显示一下
  256.                                    write_com(0x80+0x4f);//显示位置重新回到调节处
  257.                             }
  258.                      }
  259.               }
  260.               if(key3==0)
  261.               {
  262.                      delay(5);
  263.                      if(key3==0)//确认减小键被按下
  264.                      {
  265.                             while(!key3);//按键释放
  266.                             if(key1num==1)//若功能键第一次按下
  267.                             {
  268.                                    sec--;//则调整秒减1
  269.                                    if(sec==-1)//若减到负数则将其重新设置为59
  270.                                           sec=59;
  271.                                    write_sfm(6,sec);//每调节一次送液晶显示一下
  272.                                    write_com(0x80+7);//显示位置重新回到调节处
  273.                             }
  274.                             if(key1num==2)//若功能键第二次按下
  275.                             {
  276.                                    min--;//则调整分钟减1
  277.                                    if(min==-1)//若减到负数则将其重新设置为59
  278.                                           min=59;
  279.                                    write_sfm(3,min);//每调节一次送液晶显示一下
  280.                             write_com(0x80+4);//显示位置重新回到调节处
  281.                             }
  282.                             if(key1num==3)//若功能键第三次按下
  283.                             {
  284.                                    hour--;//则调整小时减1
  285.                                    if(hour==-1)//若减到负数则将其重新设置为23
  286.                                           hour=23;
  287.                                    write_sfm(0,hour);//每调节一次送液晶显示一下
  288.                                    write_com(0x80+1);//显示位置重新回到调节处
  289.                             }
  290.                             if(key1num==4)//若功能键第四次按下
  291.                             {
  292.                                    day--;//则调整日减1
  293.                                    if(day==0)//若日为零时将置一
  294.                                    day=31;
  295.                                    write_sfm(0x48,day);//每调节一次送液晶显示一下
  296.                                    write_com(0x80+0x49);//显示位置重新回到调节处
  297.                             }
  298.                             if(key1num==5)//若功能键第五次按下
  299.                             {
  300.                                    mon--;//则调整月减1
  301.                                    if(mon==0)//若月为零将置一
  302.                                    mon=12;
  303.                                    write_sfm(0x45,mon);//每调节一次送液晶显示一下
  304.                                    write_com(0x80+0x45);//显示位置重新回到调节处
  305.                             }
  306.                             if(key1num==6)//若功能键第六次按下
  307.                             {
  308.                                    ye2--;//则调整年减1
  309.                                    if(ye2<0)//若小于零后将设置为99
  310.                                    ye2=99;
  311.                                    year=ye1*100+ye2;
  312.                                    write_sfm(0x42,ye2);//每调节一次送液晶显示一下
  313.                                    write_com(0x80+0x42);//显示位置重新回到调节处
  314.                             }
  315.                             if(key1num==7)//若功能键第七次按下
  316.                             {
  317.                                    ye1--;//则调整年减100
  318.                                    if(ye1<0)//若小于零后将设置为99
  319.                                    ye1=99;
  320.                                    year=ye1*100+ye2;
  321.                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  322.                                    write_com(0x80+0x40);//显示位置重新回到调节处
  323.                             }
  324.                             if(key1num==8)//若功能键第八次按下
  325.                             {
  326.                                    week--;//则调整周减一
  327.                                    if(week==0)//若等于0后将置7
  328.                                    week=7;
  329.                                    write_sfm(0x4f,week);//每调节一次送液晶显示一下
  330.                                    write_com(0x80+0x4f);//显示位置重新回到调节处
  331.                             }
  332.                      }
  333.               }
  334.        }
  335.        if(keyE==0)
  336.        {
  337.               delay(5);
  338.               if(keyE==0)//确认功能键被按下
  339.               {   
  340.                      key2num++;//功能键按下次数记录
  341.                      while(!keyE);//释放确认
  342.                      if(key2num==1)//第一次被按下时
  343.                      {
  344.                             TR0=0;//关闭定时器
  345.                             write_com(0x80+0x0f);//光标定位到秒位置
  346.                             write_com(0x0f);//光标开始闪烁
  347.                      }
  348.                      if(key2num==2)//第二次按下光标闪烁定位到分钟位置
  349.                      {
  350.                             write_com(0x80+0x0c);
  351.                      }
  352.                      if(key2num==3)//第三次按下光标闪烁定位到小时位置
  353.                      {
  354.                             write_com(0x80+9);
  355.                      }
  356.                      if(key2num==4)//第八次按下
  357.                      {
  358.                             key2num=0;//记录按键数清零
  359.                             write_com(0x0c);//取消光标闪烁
  360.                             TR0=1;//启动定时器使时钟开始走
  361.                      }
  362.                      }
  363.                      }
  364.               if(key2num!=0)//只有功能键被按下后,增加和减小键才有效
  365.        {
  366.               if(key2==0)
  367.               {
  368.                      delay(5);
  369.                      if(key2==0)//增加键确认被按下
  370.                      {
  371.                             while(!key2);//按键释放
  372.                             if(key2num==1)//若功能键第一次按下
  373.                             {
  374.                                    miao++;//则调整秒加1
  375.                                    if(miao==60)//若满60后将清零
  376.                                    miao=0;
  377.                                    write_sfm(0x0e,miao);//每调节一次送液晶显示一下
  378.                                    write_com(0x80+0x0e);//显示位置重新回到调节处
  379.                             }
  380.                             if(key2num==2)//若功能键第二次按下
  381.                             {
  382.                                    fen++;//则调整分钟加1
  383.                                    if(fen==60)//若满60后将清零
  384.                                    fen=0;
  385.                                    write_sfm(0x0b,fen);//每调节一次送液晶显示一下
  386.                                    write_com(0x80+0x0b);//显示位置重新回到调节处
  387.                             }
  388.                             if(key2num==3)//若功能键第三次按下
  389.                             {
  390.                                    shi++;//则调整小时加1
  391.                                    if(shi==24)//若满24后将清零
  392.                                    shi=0;
  393.                                    write_sfm(8,shi);;//每调节一次送液晶显示一下
  394.                                    write_com(0x80+8);//显示位置重新回到调节处
  395.                             }
  396.                      }
  397.               }
  398.               if(key3==0)
  399.               {
  400.                      delay(5);
  401.                      if(key3==0)//确认减小键被按下
  402.                      {
  403.                             while(!key3);//按键释放
  404.                             if(key2num==1)//若功能键第一次按下
  405.                             {
  406.                                    miao--;//则调整秒减1
  407.                                    if(miao==-1)//若减到负数则将其重新设置为59
  408.                                           miao=59;
  409.                                    write_sfm(0x0e,miao);//每调节一次送液晶显示一下
  410.                                    write_com(0x80+0x0e);//显示位置重新回到调节处
  411.                             }
  412.                             if(key2num==2)//若功能键第二次按下
  413.                             {
  414.                                    fen--;//则调整分钟减1
  415.                                    if(fen==-1)//若减到负数则将其重新设置为59
  416.                                           fen=59;
  417.                                    write_sfm(0x0b,fen);//每调节一次送液晶显示一下
  418.                             write_com(0x80+0x0b);//显示位置重新回到调节处
  419.                             }
  420.                             if(key2num==3)//若功能键第三次按下
  421.                             {
  422.                                    shi--;//则调整小时减1
  423.                                    if(shi==-1)//若减到负数则将其重新设置为23
  424.                                           shi=23;
  425.                                    write_sfm(8,shi);//每调节一次送液晶显示一下
  426.                                    write_com(0x80+8);//显示位置重新回到调节处
  427.                             }
  428.                      }
  429.                      }
  430.                      }
  431. }
  432. /*主函数*/
  433. void main()
  434. {
  435.        led_cs=0;
  436.        init_1602();
  437.        while(1)
  438.        {
  439.               keyscan();
  440.        }

  441. }
  442. /*中断函数*/
  443. void timer0() interrupt 1//定时器0中断服务程序
  444. {
  445.        TH0=(65536-50000)/256;//再次装定时器初值
  446.        TL0=(65536-50000)%256;
  447.        count++;//中断次数累加
  448.        if(count==20)//20次50毫秒为1秒
  449.        {
  450.               count=0;
  451.               sec++;
  452.               if(sec==60)//秒加到60则进位分钟
  453.               {
  454.                      sec=0;//同时秒数清零
  455.                      min++;
  456.                      if(min==60)//分钟加到60则进位小时
  457.                      {
  458.                             min=0;//同时分钟数清零
  459.                             hour++;
  460.                             //boom=1;
  461.                             //delay(5);
  462.                             //boom=0;
  463.                             if(hour==24)//小时加到24则小时清零
  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);//小时若变化则重新写入
  584.                      }
  585.                      write_sfm(3,min);//分钟若变化则重新写入
  586.               }
  587.               write_sfm(6,sec);//秒若变化则重新写入
  588.                      if((hour==shi&& min==fen) && sec==miao)
  589.        {
  590.               boom=1;
  591.               delay(50);
  592.               boom=0;
  593.        }
  594.        }
复制代码



回复

使用道具 举报

ID:164602 发表于 2018-10-31 08:19 | 显示全部楼层
多看例子哦。
给你一个含头文件的例子:LCD1602的显示程序,你可以学习头文件怎么写。
主程序:
#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         //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)          //写入命令
{
        LCD1602_E = 0;     //使能
        LCD1602_RS = 0;           //选择发送命令
        LCD1602_RW = 0;           //选择写入
       
        LCD1602_DATAPINS = com;     //放入命令
        Lcd1602_Delay1ms(1);                //等待数据稳定

        LCD1602_E = 1;                  //写入时序
        Lcd1602_Delay1ms(5);          //保持时间
        LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)          //写入命令
{
        LCD1602_E = 0;         //使能清零
        LCD1602_RS = 0;         //选择写入命令
        LCD1602_RW = 0;         //选择写入

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

        LCD1602_E = 1;         //写入时序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

//        Lcd1602_Delay1ms(1);
        LCD1602_DATAPINS = com << 4; //发送低四位
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;         //写入时序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif

#ifndef         LCD1602_4PINS                  
void LcdWriteData(uchar dat)                        //写入数据
{
        LCD1602_E = 0;        //使能清零
        LCD1602_RS = 1;        //选择输入数据
        LCD1602_RW = 0;        //选择写入

        LCD1602_DATAPINS = dat; //写入数据
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;   //写入时序
        Lcd1602_Delay1ms(5);   //保持时间
        LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)                        //写入数据
{
        LCD1602_E = 0;          //使能清零
        LCD1602_RS = 1;          //选择写入数据
        LCD1602_RW = 0;          //选择写入

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

        LCD1602_E = 1;          //写入时序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

        LCD1602_DATAPINS = dat << 4; //写入低四位
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;          //写入时序
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif

#ifndef                LCD1602_4PINS
void LcdInit()                                                  //LCD初始化子程序
{
        LcdWriteCom(0x38);  //开显示
        LcdWriteCom(0x0c);  //开显示不显示光标
        LcdWriteCom(0x06);  //写一个指针加1
        LcdWriteCom(0x01);  //清屏
        LcdWriteCom(0x80);  //设置数据指针起点
}
#else
void LcdInit()                                                  //LCD初始化子程序
{
        LcdWriteCom(0x32);         //将8位总线转为4位总线
        LcdWriteCom(0x28);         //在四位线下的初始化
        LcdWriteCom(0x0c);  //开显示不显示光标
        LcdWriteCom(0x06);  //写一个指针加1
        LcdWriteCom(0x01);  //清屏
        LcdWriteCom(0x80);  //设置数据指针起点
}
#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单片机12MHZ时钟下的延时函数*/
void Lcd1602_Delay1ms(uint c);   //误差 0us
/*LCD1602写入8位命令子函数*/
void LcdWriteCom(uchar com);
/*LCD1602写入8位数据子函数*/       
void LcdWriteData(uchar dat)        ;
/*LCD1602初始化子程序*/               
void LcdInit();                                                  

#endif


回复

使用道具 举报

ID:418352 发表于 2018-10-31 10:01 | 显示全部楼层
h文件是保存的话直接加个.h,如果要写h文件的话有开头和结尾的固定格式,下面这个为参考,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
回复

使用道具 举报

ID:418357 发表于 2018-10-31 10:07 | 显示全部楼层
要多写几个C文件,要不可读性太差了
回复

使用道具 举报

ID:415088 发表于 2018-10-31 10:59 | 显示全部楼层
#ifndef
#define


#endif
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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