单片机实验报告

单片机实验报告

2023年7月14日发(作者:)

单片机实验报告

班 级:

姓 名:

学 号:

日 期:

实验一:跑马灯实验

实验目的:1.通过实验,掌握汇编语言程序的基本格式及其编写;

2.通过实验,熟悉指令系统,掌握查表指令及其应用;

3.通过实验,掌握子程序及延时子程序的编写;

4.通过实验,掌握中断的概念及其定时器的应用

实验内容:1.键入跑马灯的代码:

#include

void delay_ms(unsigned int time)

{

unsigned int k,l;

for(k=0;k

for(l=0;l<1141;l++);

}

void main(void)

{ unsigned char i,j;

PORTC=0x00;DDRC=0xFF;

while(1)

{ j=0x02;

for(i=0;i<7;i++) //8个流水灯逐个闪动

{

PORTC=j;

delay_ms(25); //调用延时函数

j<<=1;

}

j=0x40;

for(i=0;i<7;i++) //8个流水灯反向逐个闪动

{

PORTC=j;

delay_ms(25); //调用延时函数

j>>=1;

}

}

}

2.通过ISIS7 模拟单片机 3..将代码通过ATMEGA16 实现跑马灯的运行。

4.在ISIS7中运行。

实验结果:

8个灯能够一次从右到左,再从左到右间隔100ms亮起。

实验问题:

一开始 代码正确但是当键入到ATMEGA16时 8个灯不能亮起,1)电阻太大而模拟的电流太小;2)delay_ms的子代码设定的时间太短。但是可以通过修改时钟频率可以对硬件进行时间脉冲修改。

实验二:键盘扫描

实验目的:1.熟悉键盘与显示器的接口连接方法。

1.掌握键盘扫描的实现过程。

实验内容:1.键入代码:#include

void delay_ms(int x)

{

int i,j;

for(i=0;i<=x;i++)

for(j=0;j<=5000;j++)

{

}

}

char cycle()

{

char jianzhi;

PORTA=0xf0; //行输出低电平,列带上拉电阻输入

DDRA=0x0F; delay_ms(15);

if(PINA==0xf0) //检查有无键按下,无键按下返回0XFF

return(0xff);

if(PINA==0x70) //获取按下键的行编码

jianzhi=1;

else if(PINA==0xb0) //四行三列

jianzhi=2;

else if(PINA==0xd0)

jianzhi=3;

else if(PINA==0xe0)

jianzhi=4;

PORTA=0x0f; //反转

DDRA=0xf0;

delay_ms(15);

if(PINA==0x0D)

jianzhi=jianzhi+0;

else if(PINA==0x0B)

jianzhi=jianzhi+4;

else if(PINA==0x07)

jianzhi=jianzhi+8;

return(jianzhi);

}

void main()

{

DDRD=0XFF;

PORTD=0X00;

DDRB=0XFF;

PORTB=0X00;

while(1)

{

int jianzhi=cycle();

switch(jianzhi)

{

case 1:PORTB=0X00;PORTD=0X01;break;

case 2:PORTB=0X00;PORTD=0X02;break;

case 3:PORTB=0X00;PORTD=0X04;break;

case 4:PORTB=0X00;PORTD=0X08;break;

case 5:PORTB=0X00;PORTD=0X10;break;

case 6:PORTB=0X00;PORTD=0X20;break;

case 7:PORTB=0X00;PORTD=0X40;break;

case 8:PORTB=0X00;PORTD=0X80;break;

case 9:PORTD=0X00;PORTB=0X01;break;

case 10:PORTD=0X00;PORTB=0X02;break;

case 11:PORTD=0X00;PORTB=0X04;break; case 12:PORTD=0X00;PORTB=0X08;break;

}

}

}

2.通过ISIS7模拟连接电路:

3.带入代码,运行程序,点击每个键盘按钮在右边的LED灯处显示所按得键盘号。

实验结果:程序能够正常运行,按键盘的时候对应的LED灯亮起。

实验问题:实验结果较为理想,但是部分细节还有待改善。

实验三:定时计数器

实验目的:1、学习单片机内部定时/计数器使用和编程方法。

2、进一步掌握中断处理程序的编程方法。

3、学习定时扩展的编程方法。

4、进一步学习单片机内部定时/计数器使用、应用程序的设计方法。

5、综合所学知识,培养综合实验的能力。

实验内容:1.键入代码:#include

#pragma interrupt_handler ZHINGXING:20

int k=0;

void ZHIXING(void)

{k++;

if(k==1000)

{ PORTA=~PORTA;

k=0; }

} void main(void)

{

PORTB=0X00;

DDRB=0XFF;

TCCR0=0X0B;

TCNT0=0X00;

OCR0=0X3E;

TIMSK=0X02;

SREG|=0X80;

while (1)

{ };

}

2.在ISIS7中模拟电路的连接:

3.带入代码,运行程序,产生1ms的中断,扩展为1s的定时信号。PB口的状态1S改变一次。

实验问题:此次试验比较好做,重点在于定时器时间常数的计算如:

系统时钟4.000MHz,64分频62.5kHz作为定时器计数脉频率。

定时计数器加1的时间为1/62.5=0.016ms, 定时1ms,需要计数1/0.016=62.5。使用定时器CTC工作方式,比较值应置为62即0x3E或63即0x63。1ms的定时有误差。只有把计算弄清楚后才能很好的运用计数器。同上,运行程序可以通过更改硬件时钟频率调节速度。

实验四:占空比25%的实验

实验目的:1.进一步掌握定时计数器的运用。 2.利用ISIS7 模拟出现实中的状况。

实验内容:键入代码:

#include

void zhixing(void)

{ // 定时器2比较匹配中断服务程序

}

void main(void)

{

DDRD=0xFF; //定义PD口为输出

PORTD=0x00;

TCCR2=0x6C;

TCNT2=0x00;

OCR2=0x40;

while(1)

{ }

}

2.在ISIS7 中进行模拟电路的连接

3.带入代码,运行出来的结果 实验问题:设置的引脚必须匹配,试验中有的时候只出现一条线(A点),是因为代码的问题,代码与试验所要求的不相符,经过认真检查能够克服。

试验总结:本次试验一共有四个:跑马灯,键盘扫描,计数器,还有产生占空比为25%的方波。

经过认真的学习以及与老师,同学的探讨中基本解决。本次实验虽然成功的完成了各项要求,但是部分细节有待完善。在此次的试验中进一步的加深了对计算机语言的运用以及对ISIS7的认识,对于单片机的认识以及生活中有运用到单片机的机器有了跟多的想法与建议。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689330261a230909.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信