中南大学单片机课程设计
更新时间:2023-09-02 11:54:01 阅读量: 教育文库 文档下载
李志民实验室单片机实验
课外通过郭天祥的视频提示,利用自己的单片机做的比较复杂的实践(c语言)
1.题目:利用动态扫描和定时器1在数码管上显示出从87654321开始,以0.1
秒得速度往下递减直至8765250并保持此数,与此同时利用定时器0以500ms
速度进行从上至下移动,当数码管上数见到停止时,实验板上流水灯也停止然
后全部开始闪烁,三秒后(用t0定时)流水灯全部关闭,数码管上显示“HELLO”
就此保持住。
实验程序
#include<reg52.h>
#include <intrins.h>
#define unit unsigned int
#define uchar unsigned char
void display(aa,bb,cc,dd,ee,bai,shi,ge) ;
void init();
sbit wela=P2^3;
sbit dula=P2^2;
uchar temp,t0,t1,bai,shi,ge,aa,bb,cc,dd,ee,flag,flag1;
unit shu;
void delay(unit z) ;
uchar code table[]={
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
,0x36,0x76,0x38,0x3f,0 };
void main()
{
init();
while(1)
{
if(flag1!=1)
display(8,7,6,5,4,bai,shi,ge);
else
display(16,17,18,18,19,20,20,20);
}
}
void init()
{ 0x3f,
李志民实验室单片机实验
shu=321;
temp=0xfe;
P1=temp;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(flag!=1)
{
if(t0==10)
{
t0=1;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%4==0)
P1=~P1;
if(t0==60)
{ TR0=0;
P1=0xff;
flag1=1;
}
}
}
李志民实验室单片机实验
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==5)
{ t1=0;
shu--;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==250)
{ TR0=0;
P1=0xff;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
flag=1;
t0=0;
TR1=0;
}
}
}
void display(aa,bb,cc,dd,ee,bai,shi,ge)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[aa];
delay(1);
wela=1;
李志民实验室单片机实验
wela=0; dula=1; P0=table[bb]; delay(1); wela=1; P0=0xfb; wela=0; dula=1; P0=table[cc]; delay(1); wela=1; P0=0xf7; wela=0; dula=1; P0=table[dd]; delay(1); wela=1; P0=0xef; wela=0; dula=1; P0=table[ee]; delay(1); wela=1; P0=0xdf; wela=0; dula=1; P0=table[bai]; delay(1); wela=1; P0=0xbf; wela=0; dula=1; P0=table[shi];
李志民实验室单片机实验
delay(1);
wela=1;
P0=0x7f;
wela=0;
dula=1;
P0=table[ge];
delay(1);
}
void delay(unit z)
{ unit i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--) ;
}
2.题目
通过按4*4的矩阵键盘在数码管上分别显示0~~F, 例如按第一行第一列是显
示0.按第一行第二列显示1······
实验程序:
#include<reg52.h>
#define unit unsigned int
#define uchar unsigned char
sbit wela=P0^1;
sbit dula=P0^0;
Uchar code table[]={
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
,0x36,0x76,0x38,0x3f,0 };
void delay(unit z);
void display(uchar num);
void keyscan();
void main()
{
dula=1; 0x3f,
李志民实验室单片机实验
P1=0;
dula=0;
wela=1;
P1=0;
wela=0;
while(1)
{
keyscan();
}
}
void keyscan()
{
uchar temp,key;
P2=0xfe;
temp=P2;
temp=temp&0xf0 ;
if(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0 ;
if(temp!=0xf0)
{
temp= P2;
switch (temp )
{
case 0x7e :key=0;break;
case 0xbe :key=1;break;
case 0xde :key=2;break;
case 0xee: key=3;break;
}
if(temp!=0xf0)
李志民实验室单片机实验
{
temp=P2;
temp=temp&0xf0
}
display(key) ;
}
}
}
void display(uchar num)
{ P1=table[ num];
dula=1;
dula=0;
}
void delay(unit z)
{ unit i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--) ;
}
;
李志民实验室单片机实验
一、实验目的与要求:
1、熟练掌握
Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切
换方法;
2、熟练使用 SST89C554RC单片机核心板及 I/O扩展实验系统;
3、熟练掌握在 Keil C51与 Proteus仿真软件虚拟联机环境下,基于 51单片机控制器数
字接口电路的硬件、软件设计与功能调试;
4、完成MCS51单片机指令系统软件编程设计和硬件接口功能设计题;
二、基本实验内容(SST89E54RC单片机实现单片机实现)
实验一:清零程序与拆字程序设计根据实验指导书之“第二章单片机原理实验”(P17~P23
页)内容,熟悉实验环境及方法,完成思考题 1、2(P23)基础实验项目。
(1) (2)
1:实验程序:ORG 0000H
李志民实验室单片机实验
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#00H ;片内RAM首地址
MOV R1,#10H ;R1设定值
MOV DPTR,#7000H ;写入数据初值
MOV A,#00H
DIM:
LOOP: MOVX @DPTR, A
INC DPTR
INC R0
CJNE R0,#00H,LOOP
DJNZ R1,DIM
SJMP $
END
2:ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV A,#13H
MOV DPTR,#7000H
MOVX @DPTR,A
MOVX A,@DPTR
MOV B,A
SWAP A
ANL A,#0FH
MOV DPTR,#7001H
MOVX @DPTR,A
MOV A,B
ANL A,#0FH
MOV DPTR,#7002H
MOVX @DPTR,A
MOVX @DPTR,A
END
实验二:拼字程序与数据传送程序设计汇编语言完成实验指导书 P24思考题
3、4题的基础实验项目。
李志民实验室单片机实验
(3) (4)
3:ORG 0100H
MAIN:
MOV A,#13H
MOV DPTR,#7000H
MOVX @DPTR,A ;给7000H赋初值
INC DPTR
MOV A,#24H
MOVX @DPTR,A ;7001H
MOV DPTR,#7000H
MOVX A,@DPTR
ANL A,#0FH
SWAP A
MOV B,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
ORL A,B
INC DPTR
MOVX @DPTR,A
END
4:ORG 0000H
AJMP MAIN
ORG 0100H
LOOP EQU 50H
MAIN:MOV R2,#70H
MOV R3,#00H
MOV R4,#70H
李志民实验室单片机实验
MOV R5,#20H
MOV R6,#00H
MOV R7,#05H
MOV DPH,R6
MOV DPL,R7
MOV A,#05H
MOVX @DPTR,A
MOV LOOP,A ;字节数
CS: MOV DPH,R2
MOV DPL,R3
MOVX A,@DPTR ;首地址值里的内容
MOV DPH,R4
MOV DPL,R5
MOVX @DPTR,A ;首地址内容传送到R4R5的地址
CLR C ;进位端清零
MOV A,R3
ADD A,#01H
MOV R3,A
JC C1
JMP C3
C1: MOV A,R2
ADD A,#01H
MOV R2,A ;地址后移
C3: CLR C
MOV A,R5
ADD A,#01H
MOV R5,A
CLR A
ADDC A,R4 ;R4R5地址后移
MOV R4,A
C4: DJNZ LOOP,CS
SJMP $
END
实验三:散转与排序程序设计汇编语言完成实验指导书 P24思考题5、6题的
基础实验项目。
李志民实验室单片机实验
(5) (6)
5:ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV R0,#30H
MOV R1,#0AH
MOV A,@R0
LOG: INC R0
CJNE A,@R0,MIN
MIN: JC MMN
SJMP MON
MMN: MOV B,A
MOV A,@R0
MOV @R0,B
MON: DJNZ R1,LOG
END
6:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
李志民实验室单片机实验
MOV R0,#30H ;数据块起始地址
MOV R1,#0AH ;比较数据个数
DEC R1
MOV A,R0
MOV R4,A
CLR PSW.5 ; 清标志位
MST: MOV A,R4
MOV R0,A
MOV A,R1
MOV R3,A
LOG:
MOV A,@R0
MOV R2,A
INC R0
MOV A,@R0
CLR C
SUBB A,R2
JC MON ;前数小于后数 ,不变
SETB PSW.5 ;清标志位
MOV A,@R0
DEC R0
MOV @R0,A
INC R0
MOV A,R2
MOV @R0,A
MON: DJNZ R3,LOG
JBC PSW.5,MST
END
实验四:数字量输入输出实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书
之“3.1数字量输入输出实验”基本实验项目(P36)。
汇编程序:
ORG 0000h
LJMP START
ORG 0060H
START:
MOV A,#0F0H ;准备给P1口高四位置高,做输入
MOV P1,A ;给P1口高四位置高
MOV A,P1 ;读P1口
SWAP A ;交换A的高四位与低四位
MOV P1,A ;将读到的数送P1口显示(通过P1口的低
四位接的发光二极管显示)
李志民实验室单片机实验
LJMP START ;重新扫描
END
提高部分:题目一:LED交通灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过开关实现LED灯工作方式即时控制,完成 LED交通灯的开关控制显示功能和 LED交通灯自动循环显示功能。
题目二:LED灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过KK1实现 LED灯工作方式即时控制完成LED开关控制显示和 LED灯左循环、右循环、间隔闪烁功能。
题目三:键盘扫描与数码管显示设计(使用 8255接口芯片)
要求:阅读、验证C语言参考程序功能。使用汇编语言完成编程与功能调
试(P69)。
实验五:定时器/计数器实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书
之“3.3定时/计数器实验”基本实验项目(P40)。
提高部分:(任选一题完成)
题目一:定时器控制LED灯
要求:由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。编写程序模拟时序控制装置。开机后第一秒钟 L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟 L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个 LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮 一直循环下去。
汇编程序:ORG 00H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#30H
MOV A,#00H
MOV P1,A
L0: MOV A,#05H ;第1s
MOV P1,A
LCALL DELAY
MOV A,#0AH
MOV P1,A
LCALL DELAY
MOV A,#50H
MOV P1,A
LCALL DELAY
MOV A,#0A0H
MOV P1,A
LCALL DELAY
MOV A,#55H
MOV P1,A
李志民实验室单片机实验
LCALL DELAY
MOV A,#0AAH
MOV P1,A
LCALL DELAY
MOV A,#0FFH
MOV P1,A
LCALL DELAY
CLR A ;第8s
MOV P1,A
LCALL DELAY
LJMP L0
DELAY: ;1s定时,初始化定时器
MOV TMOD,#10H
MOV TH1,#9EH
MOV TL1,#58H
MOV IE,#00H
MOV R0,#14H
LOOP:SETB TR1
LOOP1:JBC TF1,LOOP2
AJMP LOOP1
LOOP2:MOV TH1,#9EH
MOV TL1,#58H
CLR TF1
DJNZ R0,LOOP
RET
END
题目二:计数器实验:
要求:单片机内部定时计数器,按计数器模式和方式1工作,对
李志民实验室单片机实验
P3.4(T0)引脚进行计数。使用T1作定时器,50ms中断一次,看T0内每0.50来了多少脉冲,将其数值按二进制在LED灯上显示出来,5秒后再次测试。
题目三:急救车与交通灯(外部中断实验)
要求:完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为
全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,
交通灯恢复中断前状态。本实验题以按键为中断申请,表示有急救车通过。
实验六:A/D、D/A转换实验
基本部分:阅读、验证
C语言程序功能。使用汇编语言编程,完成实验指导书之“4.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目(P67)。
实验目的:
1. 学习数/模转换的基本原理
2. 掌握 DAC0832 的使用方法。
实验内容:
设计实验电路图实验线路并编写程序,实现 D/A 转换,要求产生锯齿波、脉冲波,并用示波器观察电压波形。
实验原理:
D/A 转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。大多数的 D/A 转换器接口设计主要围绕 D/A集成芯片的使用及配置响应的外围电路。DAC0832 是 8 位芯片,采用 CMOS 工艺和 R-2RT 形电阻解码网络,转换 WR1 结果为一对差动电流 Iout1 和 Iout2
4-4-1 示,引脚如图 4-4-1所示。
输出,其主要性能参数如表
李志民实验室单片机实验
实验步骤
1. 实验接线图如图 4-4-2 所示,按图接线;
2. 编写实验程序,经编译、链接无误后装入系统,启动调试;
3. 运行程序,用示波器测量 DA 的输出,观察实验现象;
4. 自行编写实验程序,产生三角波形,使用示波器观察输出,验证程序功能。
AD: ORG 00H
LJMP MAIN
ORG 0100H
MAIN:
STR EQU 7F08H ;转换值存储地址
MOV R0,#08
MOV DPTR,#7F00H ;转换值起始地址
LOOP: MOVX @DPTR,A
NOP
JNB P3.3,$
MOVX A,@DPTR
MOV P2,STR
MOV R0,STR+1
MOVX @DPTR,A
INC DPTR
INC STR
DJNZ R0,LOOP
END
DA:
ORG 00H
李志民实验室单片机实验
LJMP MAIN
ORG 0100H
MAIN:
MOV DPTR,#7FFFH
MOV A,#00H ;初始值,产生锯齿波
LP1:MOVX @DPTR,A
INC A
SJMP LP1
END
提高部分:(要求在PROTERUS中完成)
小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A
转换方式),经过 A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
实验七:串行通信实验
基本部分:阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书
之“3.7串口通讯实验”项目。(要求:实验仪器上完成)
利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。
实验目的:
1. 学习MCS-51 单片机串口的工作原理及程序设计;
2. 了解使用SSTEasyIAP11F.EXE 软件实现程序脱机运行的方法;
3. 熟悉启动加载代码与SoftICE 相互切换的方法。
实验原理:
MCS-51 单片机内部的全双工串行接口部分,包含有串行接收器和串行发送器。有两个物理上独立的接收缓冲器和发送缓冲器。接收缓冲器只能读出接收的数据,但不能写入。发送缓冲器只能写入发送的数据,但不能读出。因此可以同时收、发数据,实现全双工通讯。两个缓冲器是特殊功能寄存器SBUF,它们公用地址为99H,SBUF 是不可位寻址的。此外,还有两个寄存器SCON 和PCON 分别用于控制串行口的工作方式以及波特率,定时器T1 可以用作波特率发生器 SST89E554RC 提供了增强型全双工串行接口,具有帧错误检测和自动地址识别的功能。 由于SST89E554RC 的串口用作调试目的,所以Keil C51 软件提供了串口模拟窗口,可以借助此窗口调试串口通讯程序。也可以将程序编译生成目标代码(.HEX),脱机运行。
李志民实验室单片机实验
实验内容
编写实验程序,每隔一定的时间单片机向串口发送一次数据“Xi’an Tangdu Corp.”。
汇编程序:ORG 00H
LJMP MAIN
ORG 0023H ;中断设置
LJMP XJM
ORG 0100H
MAIN: MOV SP,#30H
MOV R1,#50H ;初始化,选定时器1产生19200b/S的波特率
MOV R0,#00H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#50H
MOV R7,#20H
SETB TR1 ;开启定时器
SETB ES ;开串行中断
SETB EA ;开全局中断
LOOP1:CLR PSW.5
DJNZ R7,LOOP
SJMP $
LOOP:MOV DPTR,#TAB
MOV A,R0
MOVC A,@A+DPTR
MOV SBUF,A
JNB PSW.5,$
SJMP LOOP1
ORG 0023H
XJM:LCALL DELAY
JB TI,SEND
LJMP RECIVE
SEND: CLR TI
INC R0
SETB PSW.5
JMP EXIT
RECIVE: MOV A,SBUF
MOV @R1,A
INC R1
正在阅读:
中南大学单片机课程设计09-02
农场社会事业办2022年度工作总结04-06
如果阅读是一次发现的旅程04-26
阿弥陀佛的故事06-24
念阿弥陀佛今生获得的好处06-27
风管安装质量通病防治措施04-29
春天的排比句摘抄11-20
民办幼儿园年检工作总结03-17
高中数学教案《由递推公式求通项公式》04-27
小学六年级语文备课组工作计划10-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 中南大学
- 单片机
- 课程
- 设计
- 基于ProE二级减速器的设计开题报告
- 资产负债表水平分析和垂直分析
- 【推荐】冬季供暖锅炉安全大检查活动总结-范文word版 (1页)
- 新人教版九年级初三历史下册第16课_世界经济的“全球化”
- 关注节能的地铁综合监控系统
- 写我最敬佩的人-作文开头
- 铁路建设项目施工作业指导书编制暂行办法
- 新版标准日本语初级上册单元试卷5-8课
- 某招标代理公司企业管理制度文本
- 宽带薪酬设计及案例大全
- “十三五”规划重点-磷酸铁锂项目建议书(立项报告)
- 化工热力学第3章解答
- 北京理工大学智能交通灯的设计
- 计算机二级C程序设计上机模拟题
- 医疗器械监督管理条例考核试题答案
- 人教版七年级美术下册教案全集
- 最新人教版小学数学六年级上册第2课时位置与方向(2)公开课导学案
- 2014年物业管理师考试基本制度与政策模拟试卷及答案
- 政治学考要点
- 拼音复习课说课稿