C51实验报告.docx
- 文档编号:8203134
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:11
- 大小:58.04KB
C51实验报告.docx
《C51实验报告.docx》由会员分享,可在线阅读,更多相关《C51实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
C51实验报告
C51实验报告
实验1集成环境开发以及并行I/O端口应用(流水灯)
实验目的:
1、认识KeiluVision、Proteus软件;
2、掌握用KeiluVision、Proteus软件建立工程;
3、掌握用KeiluVision、Proteus软件进行仿真调试;
实验原理:
仪器与材料:
安装有Proteus和Keil软件的微机。
实验步骤:
1、在proteus软件中画原理图;
2、keil软件下编写源程序并编译形成可执行文件.hex;
3、载源程序;
4、仿真。
实验记录:
#include
unsignedchari;
unsignedchartemp;
unsignedchara,b;
voiddelay(void)
{
unsignedcharm,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
voidmain(void)
{
while
(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
讨论及回答问题:
如何通过修改程序,改变流水灯的变化样式。
实验2单片机的中断应用
实验目的:
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
实验原理:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断程序中设定是否允许中断重入,即设置EX0位。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
使用拨动开关K1来产生中断触发信号。
由于采用边沿触发方式,K1应从高电平端,拨向低电平端来产生中断触发信号。
仪器与材料:
安装有Proteus和Keil软件的微机。
实验步骤:
实验记录:
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharm=0;
voiddelay(ucharc)
{
unsignedchara,b;
for(;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
voidINT_0()interrupt0
{
EX0=0;
delay(20);
EX0=1;
if(m==10)m=0;
elseP1=table[m++];
}
voidINT_1()interrupt2
{
EX1=0;
delay(20);
EX1=1;
if(m==0)m=10;
elseP1=table[--m];"
}
voidmain()
{
P1=0x00;
EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
while
(1);
}
讨论及回答问题:
如何通过修改程序,改变中断优先级。
实验3定时计数器的使用
实验目的:
1.学习8051内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
实验原理:
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:
机器周期=12÷11.0592MHz=1.0857μS
(65536-定时常数)*1.0857μS=50mS
定时常数=4C00H
仪器与材料:
安装有Proteus和Keil软件的微机。
实验步骤:
实验记录:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLED=P1^0;/
bitflag;
ucharcount=0;
voiddelay(ucharc)
{
unsignedchara,b;
for(;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
voidmain(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
if(flag==1)
{LED=0;
delay(100);//延时100ms
LED=1;
flag=0;
}
}
}
voidtime0(void)interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count>=100)
{
count=0;
flag=1;
}
}
讨论及回答问题:
定时和计数的相同和相异之处。
实验4矩阵键盘的显示
实验目的:
学习矩阵键盘的设计和编程方法。
实验原理:
每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
仪器与材料:
安装有Proteus和Keil软件的微机。
实验步骤:
1、设计4*4电路;
2、用KeiluVision编写c语言程序;
3、利用KeiluVision、Proteus软件进行仿真调试;
实验记录:
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodeKEY_TABLE[]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
ucharcodeTABLE[]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayl()
{
uintn=50000;while(n--);
}
voiddelays()
{
uintn=10000;while(n--);
}
main()
{
uchartemp,key,num,i;
while
(1)
{
dula=0;wela=0;
P3=0xf0;
if(P3!
=0xf0)
{delays();
if(P3!
=0xf0)
{
temp=P3;
P3=0x0f;
key=temp|P3;
for(i=0;i<16;i++)
if(key==KEY_TABLE[i])
{num=i;break;}
P0=0;wela=1;wela=0;
P0=TABLE[num];
dula=1;delayl();dula=0;
}
}
}
}
讨论及回答问题:
矩阵键盘与独立按键的相异之处。
实验5数码管的动态显示
实验目的:
学习单片机数码管的动态显示方法;
实验原理:
采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)
仪器与材料:
安装有Proteus和Keil软件的微机。
实验步骤:
1、在proteus软件中画原理图;
2、keil软件下编写源程序并编译形成可执行文件.hex;
3、载源程序;
4、仿真。
实验记录:
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]=
{0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
ucharcodeaddress[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voiddelay(uint);
voidmain()
{
ucharm=0;
while
(1)
{
if(m==8)m=0;
P2=address[m];
P1=table[m++];
delay(5000);
}
}
voiddelay(uintm)
{
while(m--);
}
讨论及回答问题:
数码管动态显示与静态显示的区别。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 实验 报告