当前位置:首页 > 单片机原理及应用实习报告
WAVE等仿真软件,对单片机有了更深的理解,同时对基于单片机的系统软件设计有了进一步的认识。在程序的编写方面,我也有了一些想法,可以说是有迹可循了。这次时间很紧张的实习,让我在平时学到的单片机的理论知识得到了实践,也让我了解了不少新的知识,如:液晶屏的显示、LED点阵的显示、几款常用设计软件的用法等等。我认为这些知识对我以后的从事这方面的工作奠定了一个良好的基础。
第二部分:PCB印刷电路板上的系统设计
1、设计目的:
这部分的实习建立在第一部分的实习较好完成的基础之上,以实际的焊接电路板为基础,利用仿真软件,进行软件系统模块设计。通过分析原理图,在以设计好的PCB印刷电路版上正确焊好所需的元器件,进而进行模块化的程序设计,检测并调试各个模块,以准确实现其功能,最终,将各个模块联结起来,组成一个系统,使其具有应用性。该部分实习,我与刘浪涛同学一组,我们主要设计了键盘、液晶屏、LED灯、八段数码管、LED点阵等五个独立的模块,并将它们成功的组合到PCB版上,形成了一个具有特定功能的系统。
2、PCB版电路原理图:
3、主要模块介绍: (1)键盘模块:先将8255的PC口置为高电平,当有按键按下时,与其相接的相应端口变为低电平,然后再送一组扫描信号,检测哪一行有低电平,从而确定所按键的位置。随后要编写一段延时程序,用来去抖。 主要程序如下:code unsigned char KeyTable[] =
code unsigned char SWEEP[] = //扫描信号 //键值表 { 0x7e, 0xbe, 0xde, 0xee, 0x7d, 0xbd, 0xdd, 0xed, 0x7b, 0xbb, 0xdb, 0xeb, 0x77, 0xb7, 0xd7, 0xe7 };
{
0xF7, 0xFB, 0xFD, 0xFE
} ;
void delay( unsigned int CNT ) {
unsigned char i; while ( CNT--!= 0)
for( i=100; i != 0; --i);
}
//延时
void delay1ms(void) //键盘去抖程序
{
unsigned char a,b,c; for(c=1;c>0;c--)
for(b=142;b>0;b--) for(a=2;a>0;a--);
}
unsigned char TestKey() {
unsigned char i, Temp; Temp = PC;
i = ~Temp & 0xf0; return i;
}
void GetKey () {
unsigned char i, j;
for( i=0; i<4; i++) //循环扫描 {
PC = SWEEP[i]; if(TestKey()) {
for(j=0; j<=15; j++) {
if( KeyTable[j] == PC ) {
Num = j; } }
delay1ms(); } }
}
(2)八段数码管显示:此处数码管显示原理与做第一部分实验时的原
理类似,但要注意电路板上有两处用到74HC138译码的模块(还有一处是液晶显示模块),所以各个数码管的位地址不可与液晶显示屏的重复,即000和001不可用。还有,数码管通常配合键盘使用。注意以上几点,就很容易实现功能了。 主要程序如下:unsigned char Ledbuff[LEDs] = {0x00};
unsigned char Num =0;
sbit CS8255 = P3^5;
unsigned char shuma[LEDs] = //八段数码管
{
LED0, LED1, LED2, LED3, LED4, LED5, LED6, LED7
};
code unsigned char LEDMAP[] = //八段显示管键码
{
0x39, 0x5e, 0x79, 0x71, 0x7f, 0x6f, 0x77, 0x7c,
0x66, 0x6d, 0x7d, 0x07, 0x3f, 0x06, 0x5b, 0x4f
};
(3)点阵模块:点阵就我理解就是利用发光二极管的特性,结合一定的程序来实现字符显示的工具。其中从原理图可以看出8255的PA口控制点阵的行,单片机的P1口控制列。当某一行的PA口为高电平,某一列的P1口为低电平时,发光的二极管的位置就确定下来了。
主要程序是:code uchar H[] = {0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//
行
code uchar L[]={0xf7,0xf7,0x80,0xb6,0x80,0xf7,0xf7,0xf7};//
列
void dianzhen() {
uchar i,k;
for(i=0;i<8;i++)
{
for(k=0;k<100;k++)
共分享92篇相关文档