头文件在工程目录下吗?writecom在哪个文件里定义的?
它说你的writecom()函数不标准,得看原型和调用,在实现writecom()这个函数的.c文件对应的.h文件加上函数声明,再在你调用的地方include这个.h文件,另外检查一下函数定义、声明、调用传参个数、类型是否一致。
不知道你这个问题是否已经解决, 如果还没有解决的话:四位一体数码管:
数码管电路原理:
与之有关的元件——“138译码器”:
①想要点亮一个数码管并让其显示数字,我们需要操作两个端口,给两个端口不同的电平。我们的单片机数码管上端是共阴极的,所以发光的条件是上端赋予低电平,下端赋予高电平。
【通俗理解:上方LED端口选择要点亮哪一个数码管;下方abcdefg端口确定点亮什么数字。】
(1)数码管上方有8个接口LED1~8,分别对应接到“译码器”的右输出端。译码器的左端连接单片机的3个P2口。(具体如何用三个P2口控制8个LED输出口,后面会单独讲解)
(2)每一体数码管下方引出abcdefg和dp共八个接口,分别对应点亮一个LED长条(图中有标注)或是小数点,点亮几个就可以组合成一个数字。这八个接口接到74HC245缓冲器的右输出端,而74HC245的左端连接单片机的8个P0口。74HC245左右端一一对应(A0-B0,A1-B1……)。
(缓冲器是用来提高单片机驱动能力的一个元件,VCC可以增强信号强度)
比如我现在想让LED6数码管发出“3”的数字。那么,上方接口所赋予的电平情况应该是(从左往右)1101 1111;下方接口接通abcdg,应该是(从左往右)1111 0010。但是,
我们在缓冲器左端传入的二进制必须从高位往低位读取。
比如,现在从左往右端口是1111 0010,但是P0输入端输入的是0100 1111,也就是P0=0x4F。
为了方便,这里总结数码管段码表:
②数码管静态显示时,只能让其中一个数码管发光。也就是说,在同一时间,上端接口只能保证有一个输入0。(具体原因见“译码器”工作方法)
③译码器工作方法:
左端输入端输入的信号按CBA排序,组成一个三位的二进制数,再将这个二进制数转化为十进制数,这个十进制数对应右端输出端的下标,这个输出端将会输出低电平。
比如输入:A : 0 、B : 1 、C : 1,排序为110,转十进制为6,Y6口(对应LED7)将会输出低电平,其他端口均输出高电平。