小工具知识网

当前位置: 首页 > 行业知识 > 单片机建立自己的库文件(1)

行业知识

单片机建立自己的库文件(1)

2026-11-11 23:06:26 来源:互联网转载

文章目录

  • 前言
  • 一、代码模块化是什么?
  • 二、使用步骤
    • 1.以LCD1602作为例子
    • 2.将LCD1602 相关的代码抽取到另外一个文件中
    • 三、调用LCD1602.h
      • 1.新建一个工程项目,将LCD1602.h添加到工程中
      • 2.在主函数上加入 #include
      • 总结

        前言

        提示:这里可以添加本文要记录的大概内容:

        课程需要:由于学习单片机的内容越来越多,如果只有一个man.c文件,并且在里面添加所有外设的配置将变得非常的拥挤,代码可读性很差。这时候就需要做代码模块化管理。


        提示:以下是本篇文章正文内容,下面案例可供参考

        一、代码模块化是什么?

        示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

        二、使用步骤

        1.以LCD1602作为例子

        将所有功能都添加到main.c文件中

         #include  //---重定义关键词---//#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/**********************************PIN口定义**********************************/#define LCD1602_DATAPINS P0sbit 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();/*LCD1602 指定地址显示任意四位数*/void lcd_4num(unsigned char dizhi,unsigned int num);unsigned int a=0;main void main() {// 初始化LCD1602 LcdInit(); LcdWriteCom(0x80); LcdWriteData('a'); LcdWriteData('1');  LcdWriteData('2'); LcdWriteData('3'); LcdWriteData('4');   // WUZHOU   1234      第一行 // 0123456789123456   第二行while(1){a++;if(a==10000){a=0;}//LcdWriteCom(0x80);//    LcdWriteData('a'); //LcdWriteData(a/1000%10+0x30);  //+0x30 将数字转换成字符  acii表//LcdWriteData(a/100%10+0x30); //LcdWriteData(a/10%10+0x30); //LcdWriteData(a%10+0x30); lcd_4num(0xc0,a);Lcd1602_Delay1ms(2000);     } }  /******************************************************************************** 函 数 名         : Lcd1602_Delay1ms* 函数功能   : 延时函数,延时1ms* 输    入         : c* 输    出         : 无* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。*******************************************************************************/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--); }      }    }/******************************************************************************** 函 数 名         : LcdWriteCom* 函数功能   : 向LCD写入一个字节的命令* 输    入         : com* 输    出         : 无*******************************************************************************/ 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;}/******************************************************************************** 函 数 名         : LcdWriteData* 函数功能   : 向LCD写入一个字节的数据* 输    入         : dat* 输    出         : 无*******************************************************************************/   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;}/******************************************************************************** 函 数 名       : LcdInit()* 函数功能 : 初始化LCD屏* 输    入       : 无* 输    出       : 无*******************************************************************************/   void LcdInit()  //LCD初始化子程序{ LcdWriteCom(0x38);  //开显示LcdWriteCom(0x0c);  //开显示不显示光标LcdWriteCom(0x06);  //写一个指针加1LcdWriteCom(0x01);  //清屏LcdWriteCom(0x80);  //设置数据指针起点}void lcd_4num(unsigned char dizhi,unsigned int num){LcdWriteCom(dizhi); //   LcdWriteData('a'); LcdWriteData(num/1000%10+0x30);  //+0x30 将数字转换成字符  acii表LcdWriteData(num/100%10+0x30); LcdWriteData(num/10%10+0x30); LcdWriteData(num%10+0x30); }

        2.将LCD1602 相关的代码抽取到另外一个文件中

        新建文件命名为 LCD1602.h

        代码如下(示例):

         #include  //---重定义关键词---//#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/**********************************PIN口定义**********************************/#define LCD1602_DATAPINS P0sbit 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(); /******************************************************************************** 函 数 名         : Lcd1602_Delay1ms* 函数功能   : 延时函数,延时1ms* 输    入         : c* 输    出         : 无* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。*******************************************************************************/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--); }      }    }/******************************************************************************** 函 数 名         : LcdWriteCom* 函数功能   : 向LCD写入一个字节的命令* 输    入         : com* 输    出         : 无*******************************************************************************/ 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;}/******************************************************************************** 函 数 名         : LcdWriteData* 函数功能   : 向LCD写入一个字节的数据* 输    入         : dat* 输    出         : 无*******************************************************************************/   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;}/******************************************************************************** 函 数 名       : LcdInit()* 函数功能 : 初始化LCD屏* 输    入       : 无* 输    出       : 无*******************************************************************************/   void LcdInit()  //LCD初始化子程序{ LcdWriteCom(0x38);  //开显示LcdWriteCom(0x0c);  //开显示不显示光标LcdWriteCom(0x06);  //写一个指针加1LcdWriteCom(0x01);  //清屏LcdWriteCom(0x80);  //设置数据指针起点}

        三、调用LCD1602.h

        1.新建一个工程项目,将LCD1602.h添加到工程中

        2.在主函数上加入 #include

        加入头文件后就可以方便引用头文件的函数,使得main.c文件变得简洁

         #include   #include unsigned int a=0;void main() {// 初始化LCD1602 LcdInit(); LcdWriteCom(0x80); LcdWriteData('a'); LcdWriteData('1');  LcdWriteData('2'); LcdWriteData('3'); LcdWriteData('4');   // WUZHOU   1234      第一行 // 0123456789123456   第二行while(1){a++;if(a==10000){a=0;}LcdWriteCom(0x80);    LcdWriteData('a'); LcdWriteData(a/1000%10+0x30);  //+0x30 将数字转换成字符  acii表LcdWriteData(a/100%10+0x30); LcdWriteData(a/10%10+0x30); LcdWriteData(a%10+0x30); Lcd1602_Delay1ms(2000);     } }  

        总结

        这是一种比较简单的封装方法,会引发一些问题,但是能用,有空看看进一步怎么优化

上一篇:易语言图像处理支持库使用指南,轻松高效处理图像,零基础也能快速上手!

下一篇:苹果ssr服务器怎么填?