单片机最小系统实训报告_单片机最小系统报告

2020-02-27 其他范文 下载本文

单片机最小系统实训报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机最小系统报告”。

单片机最小系统实训报告

一、实训目的1、掌握并理解单片机最小系统的原理及制作, 牢记最小系统中各元器件 的参数及各元器的作用./

2、掌握单片机芯片内部的组成及存储机构。

3、理解常用指令的功能和使用方法。

4、掌握单片机的中断源,中断控制寄存器,中断响应过程,定时/计数器的电路结构、功能我使用方法,定时器/计数控制寄存器.5、复习利用Keil51软件对程序进行编译。

6、用protel软件绘制“单片机最小系统”电路,并用测试程序进行仿真。

7、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果能做出不分析我解释,能学出符合规格的实验报告。

二、实训工具

1、点偏激测试平台:PC机,串口线,并口线,单片机开发板

2、软件:keil51测试软件,protel仿真软件,DXP2004软件。

三、实训要求

通过实训,学生应达到以下经济方面的要求:

素质要求

1、以积极认真的态度对待本次实训,遵章守纪、团结协作。

2、善于发现数字电路中存在的问题、分析问题、解决问题,努力培养独立工作能力。

能力要求

1、模拟电路的理论知识

2、脉冲与数字电路的理念知识

3、通过模拟、数字电路实验有一定的动手能力

4、能熟练的制作单片机最小系统

5、嫩熟练的编写8951单片机汇编程序

6、能够熟练的运用仿真软件对单片机最小系统仿真

四、实训内容

1、掌握并理解“单片机最小系统”的原理及制作,牢记最小系统中各元器件的参数及格元器件的作用。

2、用keil51测试元件编写8951单片机汇编程序

3、用peotel软件绘制“单片机最小系统”单路原理图。

4、运用仿真软件对单片机最小系统进行仿真。五.实训基本步骤

1、用peotel乳酸钠几十年绘制“单片机最小系统”单路原理图。

2、根据原理图生成pcb图、GB文件。钻孔文件

3、绘制印刷电路板。

4、根据原理图焊接元件,生成单片机开发板。

5、用keil51软件编写单片机最小系统测试程序。

6、用仿真软件绘制单片机最小系统原理图,测试测量程序。

7、把测试程序拷贝到单片机里进行实物测试。

8、观察测试结果。

六、51单片机C编语言程序测试 测试程序流水灯1: //用定时器做流水灯测试 //为定时显示做准备

//P1-0-----PF1.3

L0-----L3 #include #include

#define unit unsigned int #define unchar unsigned char

sbit L0 = P1^0;sbit L1 = P1^1;sbit L2 = P1^2;sbit L3 = P1^3;

unsigned char data BUFFER[1]={0};

void main(void){ P2=0X0F;

EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=-5000/256;TL0=-5000%256;TR0=1;

while(1){

};} //定时器0中断服务程序// void timer0(void)interrupt 1 using 1 { TH0=-5000/256;TL0=-5000%256;BUFFER[0]=BUFFER[0]+1;if(BUFFER[0]==100)

{

L3=!L3;

L2=!L2;

L1=!L1;

L0=!L0;

} } 测试程序流水灯2:

//此程序为了做花样流水灯的//采用了C的宏定义 X 可以实现一改全改 #include #include #define unit unsigned int #define unchar unsigned char

#define X 16 //

unsigned int time=0;

unsigned int a[X]={

0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80, 0X18,0X24,0X42,0X81,0X42,0X24,0X18,0X00,void main(void){ P1=0X0f;EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=9000/256;TL0=9000%256;TR0=1;

while(1){

P1=a[time];};} //定时器0中断服务程序// void timer0(void)interrupt 1 using 1 { TH0=9000/256;TL0=9000%256;

time++;if(time==X)time=0;

} //此程序来测试数码管

//P0.0--P0.7

A B C D E F G dp //P2.0--P2.7

C0M0--------C0M8 #include #include

#define unit unsigned int #define unchar unsigned char

unsigned char data BUFFER[1]={0};unsigned char X=0;//共阳极码表数码管

unsigned char leddata[]={

0xC0, //“0”

0xF9, //“1”

0xA4, //“2”

};

0xB0, //“3”

0x99, //“4”

0x92, //“5”

0x82, //“6”

0xF8, //“7”

0x80, //“8”

0x90, //“9”

0x88, //“A”

0x83, //“B”

0xC6, //“C”

0xA1, //“D”

0x86, //“E”

0x8E, //“F”

0x89, //“H”

0xC7, //“L”

0xC8, //“n”

0xC1, //“u”

0x8C, //“P”

0xA3, //“o”

0xBF, //“-”

0xFF, //熄灭

0xFF //自定义

};

unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};void Delay(unsigned char cnt){ while(cnt--);} void xian_shi(unsigned char cp){ unsigned char i;unsigned int z=cp;for(i=0;i

{

P0=leddata[z%10];

P2=com[i];

Delay(200);

z=z/10;

} } void main(void){

P0=0X00;P2=0Xff;EX0=1;IT0=1;EA=1;

while(1){

xian_shi(X);};} //定时器0中断服务程序// void timer0(void)interrupt 1 using 1 { X++;if(X==25){

X=0;} } 此程序测试键盘

//P3.0---P3.3

L0-------L3 //从左到有显示为 0 1 2 3

P3.4/ //上///

5 6 7

P3.5/ //到///

9 A B

P3.6/ //下///

C D E F

P3.7/ //P3.4--=P3.7

H0----H3 #include

#define uchar unsigned char #define uint unsigned int

unsigned char led_data[]={

0xC0, //“0”

0xF9, //“1”

0xA4, //“2”

0xB0, //“3”

0x99, //“4”

0x92, //“5”

0x82, //“6”

0xF8, //“7”

0x80, //“8”

0x90, //“9”

0x88, //“A”

0x83, //“B”

0xC6, //“C”

0xA1, //“D”

0x86, //“E”

0x8E, //“F”

0x89, //“H”

0xC7, //“L”

0xC8, //“n”

0xC1, //“u”

0x8C, //“P”

0xA3, //“o”

0xBF, //“-”

0xFF, //熄灭

0xFF //自定义

};

void delay(uint i)

{ while(i--);}

uchar keyscan(void)// { uchar cord_h,cord_l;//行列值中间变量

P3=0x0f;

//行线输出全为0 cord_h=P3&0x0f;

//读入列线值

if(cord_h!=0x0f)

//先检测有无按键按下

{

delay(100);

//去抖

if(cord_h!=0x0f)

{

cord_h=P3&0x0f;//读入列线值

P3=cord_h|0xf0;//输出当前列线值

cord_l=P3&0xf0;//读入行线值

return(cord_h+cord_l);//键盘最后组合码值

}

}

return 0xFF;}

void main()

{ uchar key;P2=0xbb;

//1数码管亮 按相应的按键,会显示按键上的字符

while(1){ key=keyscan();//调用键盘扫描,switch(key){

case 0xEE:P0=led_data[0];break;//0 按下相应的键显示相对应的码值

case 0xED:P0=led_data[1];break;//1

case 0xEB:P0=led_data[2];break;//2

case 0xE7:P0=led_data[3];break;//3

case 0xDE:P0=led_data[4];break;//4

case 0xDD:P0=led_data[5];break;//5

case 0xDB:P0=led_data[6];break;//6

case 0xD7:P0=led_data[7];break;//7

case 0xBE:P0=led_data[8];break;//8

case 0xBD:P0=led_data[9];break;//9

case 0xBB:P0=led_data[10];break;//a

case 0xB7:P0=led_data[11];break;//b

case 0x7E:P0=led_data[12];break;//c

case 0x7D:P0=led_data[13];break;//d

case 0x7B:P0=led_data[14];break;//e

case 0x77:P0=led_data[15];break;//f } } } //此程序用来测试中断键盘P3.2 INT0 //下跳沿触发 // #include #include

#define unit unsigned int #define unchar unsigned char

sbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;

unsigned int times=0;

void delay(unsigned int cp)

{

unsigned int i=cp;

while(i--);

}

unsigned char leddata[]={

0xC0, //“0”

0xF9, //“1”

0xA4, //“2”

0xB0, //“3”

0x99, //“4”

0x92, //“5”

0x82, //“6”

0xF8, //“7”

0x80, //“8”

0x90, //“9”

0x88, //“A”

0x83, //“B”

0xC6, //“C”

0xA1, //“D”

0x86, //“E”

0x8E, //“F”

0x89, //“H”

0xC7, //“L”

0xC8, //“n”

0xC1, //“u”

0x8C, //“P”

0xA3, //“o”

0xBF, //“-”

0xFF, //熄灭

0xFF //自定义

};

unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};

void xian_shi(unsigned char cp){

unsigned char i;unsigned int z=cp;for(i=0;i

{

P0=leddata[z%10];

P2=com[i];

delay(200);

z=z/10;

} }

void main(void){ P1=0Xdd;EX0=1;IT0=1;EA=1;

while(1){

xian_shi(times);};}

//INT0低电平中断服务程序// void intersvr0(void)interrupt 0 using 1 {

L0=!L0;

L1=!L1;

L2=!L2;

L3=!L3;

times ++;}

//最简单的24小时显示 #include #include

#define unit unsigned int #define unchar unsigned char

unsigned char data BUFFER[1]={0};unsigned char time[3]={0};

unsigned char leddata[]={

0xC0, //“0”

0xF9, //“1”

0xA4, //“2”

0xB0, //“3”

0x99, //“4”

0x92, //“5”

0x82, //“6”

0xF8, //“7”

0x80, //“8”

0x90, //“9”

0x88, //“A”

0x83, //“B”

0xC6, //“C”

0xA1, //“D”

0x86, //“E”

0x8E, //“F”

0x89, //“H”

0xC7, //“L”

0xC8, //“n”

0xC1, //“u”

0x8C, //“P”

0xA3, //“o”

0xBF, //“-”

0xFF, //熄灭

0xFF //自定义

};

unsigned char com[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};void Delay(unsigned char cnt){ while(cnt--);} void xian_shi(void){ unsigned char i;unsigned int SS=time[0]+100*time[1]+10000*time[2];for(i=0;i

{

P0=leddata[SS%10];

P2=com[i];

Delay(200);

SS=SS/10;

} } void main(void){ P0=0X00;P2=0Xff;EA=1;IT0=1;ET0=1;TMOD=0X01;TH0=0xec;TL0=0x78;

TR0=1;

while(1){

xian_shi();};} //定时器0中断服务程序// void timer0(void)interrupt 1 using 1 { TH0=0xec;TL0=0x78;

BUFFER[0]=BUFFER[0]+1;if(BUFFER[0]==100){

time[0]++;

BUFFER[0]=0;

if(time[0]==60)

{

time[0]=0;

time[1]++;

if(time[1]==60)

{

time[1]=0;

if(time[1]==60)

{

time[1]=0;

time[2]++;

if(time[2]==24)

}

}

}

time[2]=0;

} }

七、实训心得

高职高专教育培养的是技术应用型人才,学校为了陪养我们的创新精神和工程实践能力,提高我们的综合素质,我们进行实训,在实践中相互学习和进步。通过实践我们更清楚的认识了我们所学习专业在实践中的运用。也感觉到理论和实践的差距。

八、附件

单片机最小系统生成原理图

《单片机最小系统实训报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
单片机最小系统实训报告
点击下载文档
相关专题 单片机最小系统报告 报告 单片机 实训 单片机最小系统报告 报告 单片机 实训
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文