本科毕业设计__基于单片机的温度报警器设计(方案) 联系客服

发布时间 : 星期日 文章本科毕业设计__基于单片机的温度报警器设计(方案)更新完毕开始阅读

unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98},i; int main() {

DDRC=0xff; PORTC=0xff; while(1) {

for(i=0;i<=9;i++) {

PORTC=seg[i]; _delay_ms(2000.0); } } }

程序的关键是字形编码的书写,不同的字形编码会得到不同的符号。在字形编码众多时,字形编码会占用大量的内存空间,字形编码这类数据的特点是:我们只需要读取它们的内容,而不会修改其内容,即只进行读操作不进行写操作。这种特点的数据,可以看成常数,对于常数可以保存在程序区。

3、多数字动态显示

单个数码管仅显示一个数字,多数情况往往需要显示多个数字。多个数字的显示多采用动态显示方法。4数码管动态显示原理图,如图6-6所示。

图13 四数码管动态显示原理图

从多数字动态显示电路可以看出:所有的数码管的相同脚连在一起,再接到PC端口。各数码管的公共端分别接在PD0~3。

4、基本多数字动态程序

在多数字动态显示电路下,要显示数字的字形数据由PC端口送出,此字形数据由那个数码管显示,只要那个数码管的公共端同其他不同,对共阳极那个数码管的公共端为高电平,其他为低电平。程序如下:

#include #include #include const prog_uchar

seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};

unsigned char i; int main() {

DDRC=0xff; PORTC=0xff;

DDRD=0xff; PORTD=0xff; while(1) {

PORTC=pgm_read_byte(seg+0); PORTD=0xf8; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+1); PORTD=0xf4; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+2); PORTD=0xf2; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+3); PORTD=0xf1; _delay_ms(50.0); } }

这个基本多数字动态程序不够灵活,只能显示提前设定的数字,通过带缓冲区的多数字动态程序可以灵活实现数字显示。

5、带缓冲区的多数字动态程序

带缓冲区的多数字动态程序是将显示部分提出,单独写成子程序,在调用子程序前,将要显示数据放入显示缓存区,再调用显示子程序。

#include #include #include const prog_uchar

seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};

unsigned char buf[]={4,7,9,8},i; void dsp();

int main() {

DDRC=0xff; PORTC=0xff; DDRD=0xff; PORTD=0xff; while(1) { dsp(); } } void dsp() {

PORTC=pgm_read_byte(seg+buf[0]); PORTD=0xf8; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+buf[1]); PORTD=0xf4; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+buf[2]); PORTD=0xf2; _delay_ms(50.0);

PORTC=pgm_read_byte(seg+buf[3]); PORTD=0xf1; _delay_ms(50.0); }

数组buf为显示缓存区,在其中放入不同数值,执行显示子程序dsp后,会显示对应数字。