16级单片机实践经验分享

实验一 李小东0105

2018-05-23  本文已影响45人  李小东0105

实验目的:为了进一步掌握单片机中点阵的使用,理解单片机的工作原理,实现在单片机上实现显示

实验器材:keil、单片机(大板)、PZ-ISP普中自动下载软件。

实验原理:8*8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线上的交叉点上,当对应的某一行置高电平,某一列置低电平是,相应的二极管就会发亮。设计出汉字,将其转化为二进制进而转化为十六进制。

实验步骤:

1.在keil中新建工程,编写.c文件。

2.编译调试文件,修改错误及警告。

3.生成.hex文件。

4.在烧录软件中下载生成的.hex软件。

程序:

#include#includesbit SRCLK=P3^6;

sbit RCLK=P3^5;

sbit SER=P3^4;

//--定义要使用的IO口--//

#define COMMONPORTS P0

//--列选通控制--//

unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

//--点阵字码--//

unsigned char code CHARCODE[6][8]=

{

0x00,0x08,0x12,0x01,0xFF,0x00,0x10,0x08,  //小

0x00,0x2a,0x3c,0x2a,0x7f,0xa8,0x2c,0x02,  //东

0x11,0xf2,0xbc,0xf2,0x1f,0x38,0x04,0xff,//别

0x38,0x28,0x38,0x23,0x55,0xd9,0x51,0x47,//吃

0x00,0x80,0x84,0x82,0xbf,0xc0,0x80,0x00,//了

{0xfb,0xfb,0xfb,0x00,0x00,0xfb,0xfb,0xfb} //叹号

};

void delay(unsigned int time){ unsigned int i,j; for(i=0;i>7;

dat<<=1;

SRCLK=1;

_nop_();

_nop_();

SRCLK=0;

}

RCLK=1;

_nop_();

_nop_();

RCLK=0;

}

/*******************************************************************************

* 函数名        : main

* 函数功能   : 主函数

* 输入          : 无

* 输出        : 无

*******************************************************************************/

void main()

{

unsigned char tab, j;

unsigned int  i;

while(1)

{

for(i= 0; i<50; i++ )  //两个字之间的扫描间隔时间

{

for(tab=0;tab<8;tab++)

{

Hc595SendByte(0x00);     //消隐

COMMONPORTS = TAB[tab]; //输出字码

Hc595SendByte(CHARCODE[j][tab]);

delay(2);

}

}

j++;

if(j == 6)

{

j = 0;

}

}

}

结果:

录视频的时候,不知道为什么,是反的。

心塞。电脑调不了GIF方向,调了就只能保存图片格式。大家将就看吧,文字是 “小东别吃了!!”


调试与修改:

1.老师的源代码是显示四个字的。我把自己的字替换之后,发现即使不显示字,它会自动停留显示字的时间,并且,想要显示多于四个字就显示不出来。后来,经过我不懈的努力......我发现需要修改

//--点阵字码--//

unsigned char code CHARCODE[6][8]=    这里的数组,和

j++;

if(j == 6) 这里的循环体,你想显示几个字就改成几个字。

2.中英文标点!!不能用混了!好几次出现了这种错误怎么也找不到,他下面好像也没有提示,但是我发现如果他最后显示的时间很短,比如0.03,这个程序就有错误,如果是0.08,大概就没问题。(辛酸)

上一篇 下一篇

猜你喜欢

热点阅读