51单片机实验开发板实验程序1.P1口第一个二极管亮
#include
void main()
{
P1=0xfd;
}
2. P1口第一个二极管闪烁
#include
#define unit unsigned int
#define uchar unsigned char
sbit led1=P1^0;
void delay();
void main()
{
while(1)
{
led1=0;
delay();
led1=1;
delay();
}
}
void delay()
{
unit x,y;
for(x=100;x>0;x--)
for(y=2000;y>0;y--);
}
3.1602液晶显示器移屏显示字符
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="https://www.wendangku.net/doc/f318368714.html,";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38); //设置16x2显示。5x7点阵,8位数据接口write_com(0x0e); //显示设置光标不显示
write_com(0x06); //光标移动,地址指针加一
write_com(0x01); //显示清屏
//write_com(0x80+0x10);
}
void main()
{
init();
write_com(0x80+0x10); //显示第一行的位置
for(num=0;num<11;num++) //显示第一行,有11个字符{
write_data(table[num]);
delay(20);
}
// write_com(1); //清屏
write_com(0x80+0x53); //第二行显示位置
for(num=0;num<13;num++) //显示第二行有13个字符
{
write_data(table1[num]);
delay(20);
}
for(num=0;num<16;num++) //向左移16个字符
{
write_com(0x1c); // 左移0001 1100
delay(200);
}
while(1);
}
4.温度计(1602显示,18b20传感器采集温度):
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit DQ=P3^7;//ds18b20与单片机连接口
sbit RS=P3^5;
//sbit RW=P3^1;
sbit EN=P3^4;
unsigned char code str1[]={"temperature: "};
unsigned char code str2[]={" "};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
for(i=0;i for(j=0;j<100;j++); } void wr_com(unsigned char com)//写指令// { delay1ms(1); RS=0; //RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_dat(unsigned char dat)//写数据// { delay1ms(1);; RS=1; // RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; } void lcd_init()//初始化设置// { dula=0; wela=0; delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } void display(unsigned char *p) //显示// { while(*p!='\0') { wr_dat(*p); p++; delay1ms(1); } } init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); } void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); } uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } void ds1820wr(uchar wdata)/*写数据*/ {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ {uchar a,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } /*******************************************************************/ void ds1820disp()//温度值显示 { uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号:- if(disdata[0]==0x30) {disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) {disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0xc0); wr_dat(flagdat);//显示符号位 wr_com(0xc1); wr_dat(disdata[0]);//显示百位 wr_com(0xc2); wr_dat(disdata[1]);//显示十位 wr_com(0xc3); wr_dat(disdata[2]);//显示个位 wr_com(0xc4); wr_dat(0x2e);//显示小数点 wr_com(0xc5); wr_dat(disdata[3]);//显示小数位 } /********************主程序***********************************/ void main() { init_play();//初始化显示 while(1) {read_temp();//读取温度 ds1820disp();//显示 } } 5.温度计(1602液晶显示,18b20采集温度,先显示学号,在显示温度) #include #include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^5; //sbit RW=P2^1; sbit EN=P3^4; sbit dula=P2^6; sbit wela=P2^7; uchar code str1[]={" Temperature is "}; uchar code str2[]={""}; uchar code str3[]={"set_hightemp: "}; uchar code str4[]={"set_lowtemp: "}; uchar code str5[]={"studentN0: "}; uchar code str6[]={"1109624076:119641"}; uchar data disdata[5]; uchar set_hightemp=33,set_lowtemp=0; //uchar p=0; //uchar aa[2]; uint tvalue;//温度值 uchar tflag;//温度正负标志 //*************************lcd1602程序**************************/ void delay1ms(uint ms)//延时1毫秒 { uint i,j; for(i=0;i for(j=0;j<114;j++); } void delay1s(uint s) { uint i; for(i=0;i delay1ms(1000); } void wr_com(uchar com)//写指令// { delay1ms(1); RS=0; //RW=0; EN=0; P0=com; // delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_dat(uchar dat)//写数据// { delay1ms(1); RS=1; // RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; } void lcd_init()//初始化设置// { delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } void display(uchar *p)//显示// { while(*p!='\0') { wr_dat(*p); p++; delay1ms(1); } } void init_play()//初始化显示 { dula=0; wela=0; lcd_init(); wr_com(0x80); display(str5); wr_com(0xc0); display(str6); delay1s(3); lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /***************************ds18b20程序****************************/ void delay_18B20(uint i)//延时1微秒 { while(i--); } void ds1820rst()/*ds1820复位*/ { uchar x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); } uchar ds1820rd()/*读数据*/ { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } void ds1820wr(uchar wdata)/*写数据*/ { uchar i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ { uchar a,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else { tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } void ds1820disp()//温度值显示 { uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号:- if(disdata[0]==0x30) { disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) { disdata[1]=0x20;//如果百位为0,十位为0也不显示} } wr_com(0xc0+4); wr_dat(flagdat);//显示符号位 wr_com(0xc1+4); wr_dat(disdata[0]);//显示百位 wr_com(0xc2+4); wr_dat(disdata[1]);//显示十位 wr_com(0xc3+4); wr_dat(disdata[2]);//显示个位 wr_com(0xc4+4); wr_dat(0x2e);//显示小数点 wr_com(0xc5+4); wr_dat(disdata[3]);//显示小数位 } void main() { P2=0xff; init_play();//初始化显示 while(1) { read_temp();//读取温度 ds1820disp();//显示} } //实例42 :用定时器T0 查询方式 P2 口8 位控制LED 闪烁 //#include 定时器的高8 }} 1KHzT1:用定时器43 实例// 音频查询方式控制单片机发出 #include 单片机中断程序大全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI- //实例42:用定时器T0查询方式P2口8位控制L E D闪烁#include #include 《单片机与接口技术》实验报告 信息工程学院 2016年9月 辽东学院信息技术学院 《单片机与接口技术》实验报告 姓名:王瑛 学号: 0913140319 班级: B1403 专业:网络工程 层次:本科 2016年9月 目录 实验题目:实验环境的初识、使用及调试方法(第一章) 实验题目:单片机工程初步实验(第二章) 实验题目:基本指令实验(第三章)4 实验题目:定时器/计数器实验(第五章)4 实验题目:中断实验(第六章)4 实验题目:输入接口实验(第八章)4 实验题目:I/O口扩展实验(第九章)4 实验题目:串行通信实验(第十一章)4 实验题目:A/D,D/A转换实验(第十七章)4 实验题目:实验环境的初识、使用及调试方法实验 实验类型:验证性实验课时: 1 时间:2016年10月24日 一、实验内容和要求 了解单片机的基础知识 了解51单片机的组成和工作方法 掌握项目工程的建立、编辑、编译和下载的过程方法 熟练单片机开发调试工具和方法 二、实验结果及分析 单片机最小系统的构成: Keil集成开发环境: STC-ISP: 实验题目:单片机工程初步实验 实验类型:验证性实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求 点亮一个LED小灯 程序下载到单片机中 二、实验结果及分析 1、点亮一个LED小灯 点亮LED小灯的程序: #include //实例42:用定时器T0查询方式P2口8位控制LED闪烁#include 第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板 课程设计说明书 课程设计任务书 3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include 51单片机:LED灯亮灯灭程序设计 1.功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1,A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序: 01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02:MOV P1,A ; 点亮灯 03:JMP START ; 重新设定显示值 04:END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设左移8次 02:MOV A, #11111110B ;存入开始点亮灯位置 03:LOOP: MOV P1, A ;传送到P1并输出 04:RL A ;左移一位 05:DJNZ R0, LOOP ;判断移动次数 06:JMP START ;重新设定显示值 07:END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设右移8次 02:MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ; 09:DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ; 51单片机定时中断C语言的写法步骤 程序说明:51单片机定时器0工作于方式一,定时50ms中断一次 晶振为12M #include void Timer0_int() interrupt 1 { //重新装初值 TH1 = 0x3c; //高八位装入初值TL1 = 0xb0; //低八位装入初值} 51单片机实验报告 实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led 也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include 实验一:MCS-51单片机开发环境的应用(2学时) 实验目的: 掌握MCS-51单片机实验系统的使用,以及在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 实验要求: ⑴将数据存储器的40H~4FH的内容赋值成00H~0FH,并将40H~4FH 的内容整体复制到50H~5FH。 ⑵将数据存储器的40H~4FH的内容赋值成00H~0FH,并将两两相加之和送到50H~57H的数据空间中。 实验二:MCS-51汇编语言典型算法程序设计(2学时) 实验目的: 掌握汇编语言程序设计的方法及常用算法的实现。 实验要求: ⑴将数据存储器的40H~4FH中杂乱无序的数按降序排列。 ⑵将两个ASCII码表示的两位10进制数转换成压缩BCD码(低4位存个位,高4位存十位)。 实验三:单片机I/O实验(2学时) 实验目的: 掌握MCS-51单片机的I/O口使用方法。 实验要求: ⑴P1口作输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。 ⑵P1.0,P1.1作为输入口接两个拨动开关,P1.2,P1.3作输出口接两个发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。 实验四:单片机定时器实验(2学时) 实验目的: 了解MCS-51单片机定时器的结构及使用方法。 实验要求: 用CPU内部定时器方式计时,实现每秒钟输出状态发生一次翻转。 实验五:单片机中断实验(2学时) 实验目的: 掌握中断控制单元的设置方法及中断的编程方法。 实验要求: ⑴用单次脉冲申请中断,在中断处理程序中对输出信号进行翻转。 ⑵用单次脉冲申请中断,要求程序中对每次中断进行计数,并将计数结果显示在发光二极管上。 实验六:单片机综合实验(4学时) 实验目的: 通过实验培养学生综合设计能力,并从整体上了解单片机的性能。实验要求: 本实验模拟交通信号灯控制,一般情况下正常显示,当有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。设急救车通过路口时间为10秒。急救车通过后,交通恢复正常。本实验需用另一台PC机上的串口调试助手(或超级终端)发送“1”,表示有急救车通过。 //实例42 :用定时器TO查询方式P2 口8位控制LED闪烁#include TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值 } // 实例43 :用定时器T1 查询方式控制单片机发出1KHz 音频#include 2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。 51系列单片机实验系统指导书 目录 前言 第1章下载式实验系统的使用方法 1.1 软件安装与启动 1.1.1 1.1.2 文件操作 1.1.3 建立工程项目(汇编) 1.1.4 调试程序 第2章软件实验 2.1 数据传送实验 2.2 清0实验 2.3 数据转换实验 2.4 拆字、拼字实验 2.5 散转程序实验 2.6 时钟实验 2.7 计数器实验 2.8 无符号十进制数加法实验 2.9 数据排序实验 2.10 单字节BCD码除法实验 2.11 查找相同个数实验 第3章硬件实验 3.1 P1口彩灯控制实验 3.2 数码管显示实验 3.3 顺序控制实验 3.4 8031和8155接口扩展与数码管显示实验 3.5 键盘、数码管显示综合实验 3.6 A/D转换实验 3.7 D/A转换实验 3.8 A/D与D/A转换综合实验 第4章89C51系列实验 4.1 顺序控制实验 4.2 数码管显示实验 4.3 键盘、数码管显示综合实验 4.4 A/D转换实验 4.5 D/A转换实验 前言 目前,51系列单片机在我国的各行各业得到了广泛应用,各大专院校、职业培训学校,均开设了单片机原理与应用方面的课程,这是一门技术性和实践性很强的学科,必须通过一系列的软硬件实验、理论联系实际,才能学好、学懂,取得较好的学习效果。为了适应这一学习上的要求,国外厂家开发了多种实验、开发系统,但普遍存在集成度高,严重脱离实际的情况。作者集多年理论教学、实验教学、产品开发的经验,完全摒弃了以前各种实验设备的那种思维模式,重新开发出一种实验、开发系统,专从产品开发角度出发,安排各种硬件实验,并且做到每一个实验就是一个小产品,每个实验就是一个产品开发的过程,从单片机最小系统开始,逐步扩展功能,从单一功能到功能多样,从小到大,从简单到复杂,自成系统给人一种完整的学习思路,让学习者概念清晰、直观明了、易学易懂,特别是加强了硬件故障排除方法的指导,解决了学习者中普遍对硬件故障排除难的问题;其次是加强了软件调试的指导,提供了一些软件调试方法和步骤,帮助初学者很快入门,帮助熟练者更加深化。 本实验系统采用模块式设计,为各学校单片机的课程设计、学生的毕业设计、提供了硬件设备,该模块可反复使用、任意组合、方便经济,解决了各单位研究与实验经费不足的问题。特别在开发产品中更加适用,一个产品谈妥后厂家往往要求几天之拿出产品样机,你可用此系统很快拼装成一个产品样机,供编程人员仿真,同时进行印制板设计。若出现问题,硬件可及时修改、添加,一切开发成功后,再作印制板,一次成功,减少经费损失,缩短了开发周期,为产品开发提供了方便。 本实验指导书分四章:第1章,下载式实验系统的使用;第2章,软件实验;第3章,硬件实验;第4章,89C51单片机实验,特别第4章完全讲解的是一个产品开发的全过程,力求使学习者获得更大的收益。 ( //实例42:用定时器T0查询方式P2口8位控制LED闪烁 #include<> // 包含51单片机寄存器定义的头文件 void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 : TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; ] TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 //实例43:用定时器T1查询方式控制单片机发出1KHz音频 #include<> // 包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为引脚 void main(void) ( {// EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 — { while(TF1==0); TF1=0; 51单片机中断系统编程 51单片机中断系统编程 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆中断是指如下过程(如下图所示):CPU 与外设同时工作,CPU执行主程序,外设做准备工作。当外设准备好时向CPU发中断请求信 号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序。在中断服务程序中 CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 5.3.1 中断系统 MCS-51单片机提供了5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储 器中各有固定的中断入口地址,由此进入中断服务程序。5个中断源的符号、名称及产生 的条件如下。 ? INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 ? INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 ? T0:定时器/计数器0中断,由T0计数溢出引起。 ? T1:定时器/计数器l中断,由T1计数溢出引起。 ? TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 中断源有两级中断优先级,可形成中断嵌套。两个特殊功能寄存器用于中断控制和条件设 置。整个中断系统的结构框图如图所示。 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 中断系统结构框图 2 中断系统的控制寄存器 中断系统有两个控制寄存器(IE和IP),它们分别用来设定各个中断源的打开/关闭和中 断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。 (1)中断允许寄存器IE IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。IE 用 来打开或关断各中断源的中断请求,基本格式如下: 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 ? EA:全局中断允许位。EA=0,禁止一切中断;EA=1,打开全局中断控制,此时,由各 个中断控制位确定相应中断的打开或关闭。 ? ×:无效位。 ? ES:串行I/O中断允许位。ES=1,允许串行I/O中断;ES=0,禁止串行I/O中断。 ? ETl;定时器/计数器T1中断允许位。ETl=1,允许T1中断;ETl=0,禁止T1中断。 ? EXl:外部中断l中断允许位。EXl=1,允许外部中断1中断;EXl=0,禁止外部中断1中 断。 ? ET0:定时器/计数器T0中断允许位。ET0=1,允许T0中断;ET0=0,禁止TO中断。 ? EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中 断。 (2)中断优先级寄存器IP IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH。 MCS-51单片机的中断分为两个优先级,IP用来设定各个中断源属于两级中断中的哪一级, 其基本格式如下: 上传的图片 51系列单片机原理与应用实验 目录 实验一交通灯控制实验 (4) 实验二现实人体视觉暂留特性测试实验 (7) 实验三实施时钟制作实验 (9) 实验四简易电子琴制作实验 (10) 实验五EEPROM应用—数字密码锁 (13) 实验六综合实验:教学板自检程序设计 (15) 实验七数据采集—火灾报警装置的软硬件设计 (17) 附录一实验教学板 (17) 附录二实验用软件使用说明 (18) 实验须知 一、预习要求 1.实验前认真阅读实验指导书的相关内容,明确实验目的和实验任务。 2.实验前应做好预习报告,在报告中,要求画出所设计的实验电路原理图、程序流程图,编写好程序,并对程序加以注释,还要拟订好实验步骤。 二、实验要求 1.按实验中心安排的时间到指定实验室上实验课,不要迟到、缺席。有特殊原因不能在原安排时间来实验时,须提前一天通知实验中心负责教师。 2.认真完成每次实验的各项任务,实验结果要请指导教师检查。教师对实验内容提问,并对完成者进行记录。 3.爱护设备,保持清洁,不得在实验室内大声喧哗,不要将食物带入实验室,不擅自更换设备。 4.在实验箱(板)通电状态下,不要用手随意触摸电路板上除按键和开关以外的芯片等其它元器件。,严禁带电操作,即所有接线、改线和拆线操作均应在不带电的状态下进行。 5.实验中若发生异常情况应立即切断电源,并向指导教师报告,检查原因,避免再次发生类似情况。 6.实验完毕,请整理好实验设备后再离开实验室。 三、实验报告要求 实验报告必须使用实验报告专用纸,书写要工整、清楚,并在下一次实验时交给指导教师。实验报告应包括以下内容: 1.实验名称、实验人姓名、学号、班级、同组人姓名。 2.实验目的、任务(内容)。 3.各任务程序流程图、自编程序清单,对程序须给出适量注释(例如:变量和 实验6 外部中断实验 (仿真部分) 一、实验目的 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验内容 在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。P1.0~ P1.3接LED灯,以显示计数信号。 三、实验说明 编写中断处理程序需要注意的问题是: 1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。 3.INT0和INT1分别接单次脉冲发生器。P1.0~ P1.3接LED灯,以查看计数信号. 四、硬件设计 利用以下元件:AT89C51、BOTTON、CAP、CAP-POL、CRYSTAL、RES、NOT、LED-Yellow。设计出如下的硬件电路。晶振频率为12MHz。 五、参考程序框图 设置P1.0~ 3初始状态 主程序框图 INT0中断处理程序框图 实验6 外部中断实验 (实验箱部分) 1.实验目的 认识中断的基本概念 学会外部中断的基本用法 学会asm和C51的中断编程方法 2.实验原理 图按键中断 【硬件接法】 控制LED,低电平点亮 INT1接按键,按下时产生低电平 【运行效果】 程序工作于中断方式,按下按键K2后,LED点亮,秒后自动熄灭。 8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。 TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。实际应用时,如果外部的中断请求信号在产生后能够在较短时间内自动撤销,则可以选择低电平触发。在中断服务程序里要等待其变高后才能返回主程序,否则会再次触发中断,产生不必要的麻烦。 如果外部的中断请求信号产生后可能长时间后才能撤销,则为了避免在中断服务程序里长时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平,这是一个重要的技巧。 3. 实验步骤 参考实验例程,自己动手建立Keil C51工程。注意选择CPU类型。Philips半导体的P89V51RB2。 编辑源程序,编译生成HEX文件。 ISP下载开关扳到“00”,用Flash Magic软件下载程序HEX文件到MCU BANK1,运行。 运行Flash Magic软件。各步骤操作如下: Step 1: COM Port:选择实际使用的串行口,通常为COM1; Baud Rate:波特率不可设置得过高,推荐用9600; Device:请选择正确的型号89V51RB2; Interface:选择None(ISP)。 Step 2:请勾中“Erase blocks used by Hex File”。 Step 3:装入你的程序文件,注意必须为HEX格式。 Step 4: 请勾中“Verify after programming”(编程后校验); 对其它几项如果不了解,请不要勾中。 Step 5: 请先给电路板上电,同时按住复位键不松手,然后点击Flash Magic软件的“Start”按 基于51单片机秒表的程序设计 1.设计目的: (1)利用单片机定时器中断和定时器计数方式实现秒、分定时。 (2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。 (3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。 (4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。 2.设计步骤与要求 (1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。 (2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。 (3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。由上述设计思路可设计出软件流程图如图1.1所示。 (5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则51单片机中断程序大全
单片机中断程序大全
51单片机实验报告94890
51单片机中断程序大全
51单片机20个实验-代码详细
51单片机课程设计
课程设计名称
专
业
班
级
学
号
学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。51单片机实验程序
51单片机控制LED灯程序设计
51单片机定时中断C语言的写法步骤
51单片机实验报告
单片机实验
51单片机中断程序大全
51单片机C语言程序设计复习资料
51系列单片机实验系统指导书
51单片机中断程序大全
51单片机中断系统编程
51单片机实验指导书
51单片机外部中断实验
基于51单片机秒表的程序设计[1]