单片机实验指导书.docx
- 文档编号:14339335
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:38
- 大小:297.10KB
单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(38页珍藏版)》请在冰点文库上搜索。
单片机实验指导书
单片机实验指导书
适用专业:
计算机控制、网络、物联网等
学时:
12
编写人:
孔庆臣
2016-5-12
实验一IO口输入输出实验
1.实验内容
(1)P2口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
(2)P1口做输入口,接八个扭子开关,P2口接八只发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。
2.实验目的
学习keil仿真软件的使用方法
学习IO口的使用方法。
学习延时子程序的编写和使用。
stc-isp软件的使用
3.有关说明
P1口为准双向口,P1的每一位都能独立地定义为输入或输出线,作为输入的口线,必须向锁存器相应位写入“1”,该位才能作为输入。
单片机IO口在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“1”使它再成为一个输入。
可以用第二个实验做一下实验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1作输入口,会有什么结果。
再来看一下延时程序的实现。
通常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
本实验系统晶振为11.0592MHZ,则一个时钟周期为0.0904us。
现要写一个延时0.1s的程序,可大致写出如下:
voidDelay100ms()//@11.0592MHz
{unsignedchari,j,k;
i=5;
j=52;
k=195;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
5.实验电路设计
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
5、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
实验二定时器实验
1.实验内容
模拟八台电机延时启动,要求当按下启动按钮后,第一台电机马上启动,其他七台每隔10秒启动一台,当按下停止按钮时所有电机同时停止,同时用发光管显示出启动与停止状态。
启动、停止时低电平有效,电机运行使用发光管电路模拟,低电平运行,高电平停止。
2.实验目的
(1)熟悉定时器工作原理
(2)掌握定时器应用编程的方法及使用技巧。
(3)了解单片机技术的基本应用设计
3.实验电路设计
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
4、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
实验三矩阵键盘及数码管显示器实验
1.实验内容
P1口完成4*4键盘输入;P2口连接数码管,显示当前按下的键位号;P0口连接数码管,记录按下按键的次数,超过16次归零从新计数。
2.实验目的
(1)熟悉矩阵键盘与单片机的常用连接方法
(2)掌握矩阵键盘的编程方法。
(3)掌握数码管与单片机的接口方式与编程方法
3.实验电路设计
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
4、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
实验四A/D转换实验
1.实验内容
利用实验台上的ADC0809做A/D转换器,实验台上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量用8个数码管显示,显示格式为“模拟电压转换成的数字量(3位数码管显示)--模拟电压转换成的数字量对应的电压值(3位数码管显示)”。
2.实验目的
掌握A/D转换与单片机的接口方法。
熟悉A/D芯片ADC0809转换性能及编程方法。
掌握动态显示的原理及编程方法。
通过实验了解单片机如何进行数据采集。
3.实验电路设计
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
4、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
实验五八路抢答器实验
1.实验内容
利用实验系统中的八个独立键盘作为抢答输入端,数码管显示抢答选手号,同时该选手对应的发光管闪烁并伴有嗡名器发声几秒,最后发光管一直保持点亮状态直到新的抢答开始。
要求当抢答开始时,第一个选手抢答后其他选手抢答无效,抢答开始键可由开关替代或使用单片机复位键实现。
2.实验目的
(1)学会单片机基本应用系统的软硬件设计的基本流程及实现方法。
(2)学会对单片机简单接口电路如:
数码管、嗡名器等的原理及编程方法
(3)提高学生独立设计、开发的能力
3.实验电路设计
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
4、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
实验六电子钟及计时器实验
1.实验内容
学生独立设计一个电子钟与计时器系统,要求:
(1)完成显示时、分、秒,时、分、秒中间用“-”分开
(2)完成计时器设计,计时器显示格式;“小时.分钟.秒钟.百分秒”
(3)电子钟必须可调整显示时间功能
(4)计时器具备开始计时、暂停、清零功能
(5)电子钟与计时器可通过按键相互切换显示
2.实验目的
(1)学会单片机较复杂应用系统的软硬件设计的基本流程及实现方法。
(2)学会对单片机简单接口电路如:
数码管动态显示原理及编程方法
(3)学会如何根据所完成的功能合理对键盘输入进行软硬件设计
(4)提高学生独立设计、开发的能力
3.实验电路
(1)分析附录1单片机实验系统部分原理图,选择合适的电路模块,并根据实验要求的功能进行合理的电路模块间的电路连接。
(2)画出本次实验独立的原理图
4、实验要求
(1)完成实验电路设计
(2)完成实验程序设计
(3)实现要求的实验结果
(4)对实验内容做全面总结
附录1单片机实验系统部分原理图
总体模块图
串口通讯及声音输出电路
单片机最小电路
独立键盘及开关电路
发光管显示电路
AD转换电路
数码管显示电路
矩阵键盘电路
附录2实验程序及硬件电路连接关系参考
实验一
第一部分:
//2JP31、2脚分别连接3JP21、2脚
//2JP21-8脚分别连接JPP11-8脚
//本程序完成发光管循环闪亮
//晶振为11.0592MHz
#include
voidDelay100ms()//延时100ms
{unsignedchari,j,k;
i=5;
j=52;
k=195;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
main()
{
unsignedchari,y=0,temp=1;//取反后为8个发光管控制初值
while
(1)
{P2=~temp;
for(i=0;i<10;i++)//延时1s
Delay100ms();
temp=(temp<<1);//左移1位
++y;//计数器加1
if(y>7)//8个发光管循环点亮一次后从新开始
{y=0;temp=1;}
}
}
第二部分:
//晶振为11.0592MHz
//2JP31、2脚分别连接3JP21、2脚
//将1JP21-8脚分别与2JP11-8脚相连,将JPP11-8脚分别与2JP21-8脚分相连
//将开关全置下,发光管全灭,将开关全置上,发光管全亮
#include
main()
{
P1=0XFF;
while
(1)
{P2=P1;
}
}
实验二
//晶振为11.0592MHz
//设定启动时间为10s,8台逐一启动
//2JP31、2脚分别连接3JP21、2脚
//2JP11、2脚分别连接1JP11、2脚
//2JP17、8脚分别连接JPP54、6脚
//2JP21-8脚分别连接JPP11-8脚
//P2口模拟8台电机启停状态,0启动,1停止
#include
n1=200;//计数器1,对定时器中断次数进行减1计数,初值200
n2=7;//计数器2,对启动电机台数进行减1计数,初值7+1台
sbitstart=P1^0;//启动按钮
sbitstop=P1^1;//停止按钮
sbitled1=P1^6;//运行显示
sbitled2=P1^7;//停止运行显示
voidtime_0()interrupt1
{
TH0=0x4c;//恢复定时初值
TL0=0x00;//恢复定时初值50ms
n1--;//定时器中断次数进行减1
if(n1==0)//定时器减1到0(达到200*50ms)
{
n1=200;//定时器中断次数恢复计数初值200
P2=(P2<<1);//再启动下一台电机
n2--;//启动电机台数减1
if(n2==0)TR0;//8台全启动,停止定时器
}
}
main()
{
TMOD=0x01;//设置定时器模式
TL0=0x00;//设置定时初值50ms
TH0=0x4c;//设置定时初值
EA=1;//开定时器0中断
ET0=1;
led1=1;//停止指示灯亮
led2=0;//运行指示灯灭
while
(1)
{if(start==0)//判断启动按钮是否按下,0按下
{P2=0xfe;//启动第一台电机
TR0=1;//启动定时器
led1=0;//运行指示灯亮
led2=1;//停止指示灯灭
}
if(stop==0)//判断停止按钮是否按下,0按下
{
TR0=0;//停止定时器
P2=0xff;//停止所有电机
TH0=0x4c;//恢复定时初值
TL0=0x00;//恢复定时初值50ms
n1=200;//定时器中断次数恢复计数初值200
n2=7;//恢复启动电机总台数
led1=1;//停止指示灯亮
led2=0;//运行指示灯灭
}
}
}
实验三
/****************矩阵键盘实例*******************************
P1口连接4*4键盘,行:
P1.0-P1.3,列:
P1.4-P1.7
P0口显示键位号,P2口显示按下该键位的次数,超过16次从0从新计数
************************************************************/
//2JP31、2脚分别连接3JP21、2脚
//P1连接4*4键盘,即2JP1连接1JP3
//P0口(2JP0)连接共阴极数码管(4JP5),显示按下按键的次数
//P2口(2JP2)连接共阳极数码管(4JP2),显示当前按下的键位号
//分别将4JP3、4JP4的2、3脚用短路片短接
//实验结束后分别恢复原来的4JP3、4JP4的1、2脚用短路片短接状态
#include
#defineucharunsignedchar
#defineuintunsignedint
//显示段码共阳,如要加上小数点则与上0x7f
codeucharseg7code_a[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阴,如要加上小数点则或上0x80
ucharcodeseg7code_c[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//存放0、1、2、3、……、E、F键的键位值,高4位存按下按键所在的列、低4位存按下按键所在的行
ucharcodekey_a[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,
0xb7,0x77};
//保存每个按键按下的次数,即:
array[0]存放0号键按下的次数,array[1]存放1号键按下的次数,...
datauchararray[16];
voiddelay(uinta)//延时a毫秒
{uinti;
while(--a!
=0)
{for(i=0;i<125;i++);}
}
voidmain()
{
uchark,h;
P0=0;//关闭共阴极数码管
while
(1)
{
ucharh,l;//h:
行l:
列
P1=0xf0;//列全置高电平,行全置低电平,即列输入、行输出
if(P1!
=0xf0)//若有键按下则列会出现低电平
{
delay(10);//按键去抖
h=P1&0xf0;
P1=0x0f;//电平反转
l=P1&0x0f;//读入行值
while(P1!
=0x0f);
delay(10);//按键去抖
k=h|l;//行值+列值,即按键值
for(h=0;h<16;h++)//键盘处理
if(key_a[h]==k)//根据键值查键位号
{
P0=seg7code_c[h];
array[h]=array[h]+1;//保存当前按下的按键对应的数组元素增1
if(array[h]>15)array[h]=0;
P2=seg7code_a[array[h]];//显示当前按下的按键累计次数
}
}
}
}
实验四
//2JP31、2脚分别连接3JP21、2脚
//2JP2(P2口)1-8脚分别连接4JP18-1脚,输出要显示数字的位码
//2JP0连接4JP2,输出要显示数字的段码
//2JP1(P1口)按管脚顺序连接5JP7,输入转换成的数字量
//2JP3(P3口)按管脚顺序连接5JP2
//5JP11-3分别连接11JP105-7脚
//调节电位器11RW1,数码管显示输出的数字量
#include
#include
//显示段码共阳,如要加上小数点则与上0x7f
//显示内容为0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、-
codeunsignedcharseg7code_a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
0x83,0xc6,0xa1,0x86,0x8e,0xbf};
codeunsignedcharwm[8]={0X80,0X40,0X20,0X10,0X8,0X4,0X2,0x1};//位码
sbitSTART=P3^0;
sbitOE=P3^1;
sbitADD0=P3^2;
sbitADD1=P3^3;
sbitADD2=P3^4;
sbitALE=P3^5;
sbitEOC=P3^6;
sbitCLK=P3^7;
dataunsignedinttemp;//存放ad转换结果
dataunsignedinttemp1[8];//存放用于显示的数据,高3位显示ad转换结果,低3位显示电压值
dataunsignedinti=0;//对显示位数计数
voidtime1()interrupt1//定时器T0服务程序
{CLK=~CLK;}//输出25kKHz方波
voidadzh(void)//A/D转换程序
{
P3=0xC0;//原理:
时序图
_nop_;
_nop_;
ALE=1;
START=1;
_nop_;
_nop_;
ALE=0;
START=0;
_nop_;
_nop_;
while(EOC==0){;}
OE=1;
_nop_;
temp=P1;//存转换结果
}
voidxscl(void)//显示处理,得到要显示8位数据的段码
{
temp1[0]=temp/100;//转换结果数字量
temp1[1]=temp%100/10;
temp1[2]=temp%10;
temp1[3]=16;
temp1[4]=16;
temp1[5]=((temp*100/51)/100);//转换结果对应的电压值
temp1[6]=(temp*100/51)%100/10;
temp1[7]=(temp*100/51)%10;
}
voiddelayms(unsignedcharj)//延时j毫秒程序
{unsignedchark;
while(j--)
{for(k=0;k<125;k++)
{;}
}
}
voiddtxs(void)//动态显示
{
P2=0;
if(i==5){P0=seg7code_a[temp1[i]]&0x7f;}//送显示数字段码给P0口
elseP0=seg7code_a[temp1[i]];//加小数点
P2=wm[i];//送显示数字位码段码给P2口
i++;
if(i>7)i=0;
delayms
(2);//延时
}
main()
{
TMOD=0x02;//设置定时器模式,方式2
TL0=0xee;//设置定时初值定时时间20us
TH0=0xee;//设置定时重载值
EA=1;//开定时器中断T0
ET0=1;
TR0=1;//定时器开始定时
while
(1)
{
adzh();//AD转换
xscl();//显示数据处理
dtxs();//数码管动态显示
}
}
实验五
/*
;八路抢答器(主控用数码管显示,抢答者指示带有闪烁功能)
;2JP31、2脚分别连接3JP21、2脚
;P1口(2JP1)连接独立键盘输入(1JP1)
;从新抢答按钮P3.2(2JP33脚)连接1号开关1JP21脚,也可不连接,用复位按钮代替
;抢答声音提示P3.3(2JP34脚)接嗡鸣器8JP4-2
;P2口(2JP2)连接发光管显示(JPP2)
;P0口(2JP0)连接数码管显示(4JP2)
;4JP32、3脚用短路片短接,注意实验后恢复原来的1、2脚短接
*/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP3_3=P3^3;//嗡鸣器控制输出管脚,0响,1不响
sbitP3_2=P3^2;//从新抢答,0键入,1无效
//共阳极数码管显示段码,如要加上小数点则与上0x7f
codeunsignedcharseg7code_a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
0x83,0xc6,0xa1,0x86,0x8e};
codeucharjpsr[8]={1,2,4,8,0x10,0x20,0x40,0x80};//当1-8号按键分别按下时,口P1取反对应的数值
uchardisplay(uchartemp)//查输入按键的段码即抢答选手号对应的段码
{
uchark;
for(k=0;k<0x7;k++)
{if(jpsr[k]==temp)break;}
return(seg7code_a[++k]);
}
voiddelay100ms(ucharn)//延时n*100ms
{uchari,j,k,h;
for(h=0;h { i=5; j=52; k=195; do { do { while(--k); }while(--j); }while(--i); } } main() {ucharinput1; bitstart; uintj; while (1) { input1=P1;//临时保存8个按钮但前状态 start=P3_2;//临时保存从新抢答按钮状态 if(start==0)//是否键入从新抢答,0键入 { P1=0xff;//P1、P2、P0口置1,恢复初始状态 P2=0xff; P0=0xff; } if(~input1&&input1)//判断是否有选手抢答 { P1=0;//屏蔽其他选手 P2=input1;//显示抢答选手 P0=display(~input1);//调用display(),查抢答选手段码,送P0口显示 P3_3=0;//嗡鸣器响 for(j=0;j<5;j++)//闪烁5次 { delay100ms (1); P2=0xff;//灭 delay100ms (1); P2=input1;//显示 } P3_3=1;//嗡鸣器停止发生 } } } 实验六 //*****单片机stc11f60xe12MHz晶振**// //*******P0段选,P2位选**********// //***P1.0: 时分秒设置切换********// //***P1.1: 增1;P1.2: 减1*******// //2JP31、2脚分别连接3JP21、2脚 //2JP01-8脚分别连接4JP21-8脚 //2JP21-8脚分别连接4JP18-1脚 //2JP11、2、3、5、7、8脚分别连接1JP11、2、3、5、7、8脚 //1JP11脚为时分秒设置切换键,1JP12脚增1键,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书