#include "stdio.h" typedef unsigned char uchar; struct mystruct{ void(*myfun1)(void); void(*myfun2)(void); void(*myfun3)(void); }; struct mystruct test; struct mystruct *testp; void myfun1(void); void myfun2(void); void myfun3(void); void main(void) { struct mystruct test = { myfun1, myfun2, myfun3, }; testp = &test; testp->myfun1(); testp->myfun2(); testp->myfun3(); system("pause"); } void myfun1(void) { printf("myfun1\n"); } void myfun2(void) { printf("myfun2\n"); } void myfun3(void) { printf("myfun3\n"); } 在以上代码中,我们定义了一个mystruct结构体,其中有三个函数指针作为结构体成员,然后定义了一个结构体指针,通过指针来调用各个函数。 现在我们把这种方法应用到单片机编程中,实现对LCD1602各个功能函数的打包。 /*目的:练习使用结构体封装函数,然后使用结构体指针来控制LCD 1. 定义一个结构体 2. 定义一个结构体变量 3. 定义几个函数 4. 定义结构体指针 5. LCD控制引脚,初始化,在哪里显示,显示什么 */ #include "reg52.h" typedef unsigned char uchar; sbit RS=P2^7; sbit EN=P2^6; struct mystruct { void (*LCD_init)(void); void (*write_data)(uchar); void (*write_string)(uchar *); void (*write_com)(uchar); void (*delay)(uchar); }; void LCD_init(void); void delayUs(uchar t); void delayMs(uchar t); void write_com(uchar mycmd); void write_data(uchar mydata); void write_string(uchar *p); struct mystruct LCD_struct; struct mystruct *LCD; void main(void) { struct mystruct LCD_struct={ LCD_init, write_data, write_string, write_com, delayMs, }; while(1) { LCD=&LCD_struct; LCD->LCD_init(); LCD->write_com(0x80); LCD->write_string("This is struct"); while(1); } } void LCD_init(void) { delayMs(15); write_com(0x38); delayMs(5); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); } void write_data(uchar mydata) { delayMs(5);//注意这里需要延时5ms比较保险 P0=mydata; RS=1; EN=1; delayUs(5); EN=0; } void write_string(uchar *p) //如何写一个字符串 { while(*p) { write_data(*p); p++; } } void write_com(uchar mycmd) { delayMs(5);//注意这里需要延时5ms比较保险 代替判断忙信号 P0=mycmd; //准备好指令 RS=0; //告诉LCD1602,P0中放的是指令不是数据 EN=1; delayUs(5); //根据时序图,脉冲要有一定宽度 EN=0; //使指令有效,开始执行 } void delayUs(uchar t) { while(--t); } void delayMs(uchar t) { while(--t) { delayUs(245); delayUs(245); } }
收藏0 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
30
149
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号