资讯详情

单片机数码管动态显示—C语言版

最近,我用C语言写了一个单片机控制数字管显示的程序,范围为0~999,虽然代码简单,但期间却有很多弯路,写出来,希望对大家有所帮助。

首先说明功能实现和参数设置:

这个子函数是在NEC实现在9234单片机上,但应该适用于大多数单片机,即不同单片机的延迟不同,这仍然是他们自己的计算,没有具体介绍。

该子函数是四位数字管共阴动态显示,display_buff是段选,display_bit是位选。

代码如下:unsigned int display_buff[4];unsigned int display_bit[4]={0x01,0x02,0x04,0x08};unsigned int buff={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/***共阴极显示:**** 0 ** 1 *** 2 ** 3 ** 4 ** 5 ** 6 ** 7 ** 8 ** 9 ***/unsigned int qian,bai,shi,ge;

void display(unsigned int temp){ int k;

qian = temp/1000;//问题1 bai = temp00/100; shi = temp0/10;ge = temp;

display_buff[0] = buff[ge]; display_buff[1] = buff[shi]; display_buff[2] = buff[bai]; display_buff[3] = buff[qian];

if(qian == 0)/**若高位为0,则不显示**/ { display_buff[3] = 0x00; if(bai == 0) { display_buff[2] = 0x00; if(shi == 0) { display_buff[1] = 0x00; } } }

for(k=0; k<4; k ) //问题2 { P0 = display_bit[k]; P4 = display_buff[k]; delay();//延时 P4 = 0x00;//问题3 }}

问题点:

1)首先是qian,bai,shi,ge变量设置最初设置为局部变量,但在运行过程中只显示最高水平。后来,我喜欢发现这是变量设置的问题,因为如果设置为局部变量,则在执行后display()函数后局部变量值会出现错误,应设置为全局变量。

2)由于这个地方的粗心,我花了很多努力,因为它使用共阴极显示,所以我没有考虑硬件问题(数字管的共阴极由三极管控制),只是想当然地使用{0xfe,0xfd,0xfb,0xf7}控制数码管的位置,所以怎么做也不对,让我很生气……呵呵,后来在检查硬件的时候才发现我一开始就错了,细心似乎很重要?O(∩_∩)O~

3)这个问题比较小,但也很重要。如果没有,其他数字管上会有非常小的显示,让人看起来不舒服。P4 = 0x00是为了屏蔽干扰。

标签: nec2p4m三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台