做单片机毕业设计的学生需要帮助的可以咨询。
大家好,我是老王,职高老师一枚,一直从事单片机、计算机、电子技术基础等课程的教学。对于职高的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学设计分享出来,如果您正是一名单片机爱好者或是一名同行,或者做毕业设计的学生不会的可以咨询。欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢#毕业设计##大学生##单片机#
下面介绍一种编码方法,在数码管显示数字时通常都要用到这种编码方法,刚才显示的数字是8,我们给 U1送入的数据是 0x7f,这是我们根据实际电路图自己给出的编码,不同的电路,编码可能不同,共阳极的编码与共阴极的编码也是不同的,因此大家一定要掌握编码原理,也就是要明白数码管显示的原理。根据本课程电路图,我们将 0~F 如表 3.2.1 所示进行编码。
在用 C语言编程时,编码定义方法如下∶
unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
编码定义方法与C语言中的数组定义方法非常相似,不同的地方就是在数组类型后面多了一个 code 关键字,code 即表示编码的意思。需要注意的是,单片机C语言中定义数组时是占用内存空间的,而定义编码时是直接分配到程序空间中,编译后编码占用的是程序存储空间,而非内存空间。
上面 unsigned char 是数组类型,也就是数组中元素变量类型,table 是数组名,我们可以自由定义它,但是不要和关键字重名;table 后面必须加中括号【】,中括号内部要注明当前数第 3 章 数码管显示原理及应用实现组内的元素个数,也可不注明,C51编译器在编编译时能够自动计算出来,通常我们不注明。等号右边用一个大括号包含所有元素,大括号后面加一个分号,大括号内部元素与元素之间用逗号隔开,注意,最后一个元素后面不要加逗号。
调用数组方法如下∶
PO=table[3];
即将 table 这个数组中的第 4 个元素直接赋给 P0 口,即
PO=0x66;
需要注意的是,在调用数组时,table后面中括号里的数字是从0开始的,对应后面大括号里的第1个元素。有了这种编码方法,我们在写数码管显示程序时就会方便很多。
【例3.2.2】下面我们结合前一章讲过的延时程序,实现这样一个功能,让实验板上6个数码管同时点亮,依次显示0到F,时间间隔为0.5s,循环下去。新建文件 part2.1_2.c,程序代码如下∶
#include#define uchar unsigned char#define uint unsigned intsbit dula P2^6;sbit dula P2^7;uchar num;uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void main(){ wela=1; P0=0xc0; wela=0; while() { for(num=0;num<16;num++) dula=1; P0=table[num]; dula=0; delay(500); }}void delayms(uint xms){ uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--)}