您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页单片机原理及应用实验指导书

单片机原理及应用实验指导书

来源:抵帆知识网


《单片机原理及应用》实验指导书

09 / 10 年 第 二 学期

姓名:___王荣坤____ 学号:_07124721____ 班级:__07计Y2___ 指导教师:__谢光前____

计算机信息工程学院 计算机科学与工程系 2009年8月修订

目 录

实验一 P1口输入输出实验………………………………………………… 1 实验二 定时器实验…………………………………………………… 实验三 外部中断实验…………………………………………………… 实验四 串行口实验…………………………………………………… 实验五 键盘显示实验…………………………………………………… 实验六 数码管显示实验…………………………………………………… 实验七 A/D转换实验……………………………………………………

3 5 7 9 11 13

2

实验一 P1口输入输出实验

一、实验目的

掌握单片机I/O口的使用,掌握数据输入输出程序编制的方法。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

P1口循环点亮8个发光二极管 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果

#include #include unsigned char a,b,k,j; void delay() {

for(a=100;a>0;a--) for(b=200;b>0;b--); }

void main() {

k=0xfe; while(1) {

delay();

k=_crol_(k,1); P1=k; }

六、实验小结和体会

通过这次的实验我了解了P1口的用法。由于实验比较简单,所以完成的比较快。而且要用到延迟程序,不然灯就不好亮。

实验二 定时器实验

一、实验目的

掌握单片机定时器使用及其编程方法。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

P1口循环点亮8个发光二极管,循环间隔为2S。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果 #include #include unsigned char a,b,k,j; void delay() {

for(a=100;a>0;a--) for(b=225;b>0;b--); }

void main() {

k=0xfe; while(1) {

If(count==40) {

delay();

k=_crol_(k,1);

P1=k; } } }

2

void init() {

TMOD=0x10;

TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=0; EA=1; TR1=1; }

void Timer1() interrupt 3 {

TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; }

六、实验小结和体会

通过本次的实验了解了定时器的用法和定时器的功能。并在运用中知道了有两个定时器和4种方式。通常使用的就是用到方式1。而且还要用到中断程序来进行记数功能定时器0要用到中断1,定时器1用到中断3。这次实验与上个实验是有联系的。要用到上个的实验只是加了定时器和中断。

3

实验三 外部中断实验

一、实验目的

学习外部中断技术的基本使用方法及中断处理的编程方法。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

当有外部中断0时,发光二极管开始循环点亮,循环间隔2S,同时蜂鸣器响,到最好一个发光二级管后,灯全灭,同时蜂鸣器停止响声。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果 #include #include

#define uchar unsigned char; sbit beep=P2^3; uchar count=0; int num; uchar weiy; void delay(); void init(); void main() { int i;

weiy=0xfe; init(); while(1) {

if(num==1) {

for(i=0;i<8;i++) {

4

P1=weiy; weiy=_crol_(weiy,1); delay(); }

if(count==100) {

beep=0; } } } }

void delay() { int i,j;

for(i=100;i>0;i--) for(j=100;j>0;j--); }

void init() {

TMOD=0x10;

TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=0; EA=1; EX0=1; IT0=0; }

void extend0() interrupt 0 using 0 {

num=1; EX0=0; TR1=1; }

void Timer1() interrupt 3 {

5

TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; }

六、实验小结和体会

6

实验四 串行口实验

一、实验目的

利用单片机串行口,实现与PC机的通讯,了解其工作原理。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果 #include

#define uchar unsigned char uchar a; int count; int aa; int flag;

sbit beep=P2^3; void init(); void delay(); void main() {

init(); flag=0; count=0; while(1) {

if(flag==1) {

7

} } }

void init() {

TMOD=0x21;

TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; ET0 = 1; // TR0 = 1;

TH1=0xFD; TL1=0xFD;

TR1=1;

SM0=0;

SM1=1;

REN=1;

EA=1;

ES=1;

PCON=0;

flag=0;

beep=1; }

void serial() interrupt 4 {

8

RI=0; a=SBUF; if(a=='1') {

flag=1; aa=8; TR0=1; }else if(a=='2') {

flag=1; aa=4 TR0=1; }else if(a=='3') {

flag=1; aa=2 TR0=1; }else if(a=='4') {

flag=0; // TR0=1; beep=1; }else {

flag=0; } }

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; // beep=!beep; //delay(); count++; //beep=0; if(count==aa) {

9

count=0; beep=!beep; //delay(); } } }

void delay() {

int i,j;

for(i=1000;i>0;i--) for(j=1000;j>0;j--); }

六、实验小结和体会

10

实验五 键盘显示实验

一、实验目的

1.熟悉并掌握系统中扩展键盘显示接口的方法。 2.掌握键盘显示的工作原理和编程的方法。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

按下矩阵键盘某个按键,数码管上显示对应的按键编号。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果

//4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include sbit beep=P2^3; sbit dula=P2^6; sbit wela=P2^7;

unsigned char i=100; unsigned char j,k,temp,key; void delay(unsigned char i) {

for(j=i;j>0;j--)

for(k=125;k>0;k--); }

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; display(unsigned char num) {

P0=table[num]; // P0=0xff; dula=1;

11

dula=0; P0=0xc0; wela=1; wela=0; }

void main() {

dula=0; wela=0; while(1) {

P3=0xfe; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(10); if(temp!=0xf0) {

temp=P3; switch(temp) {

case 0xee: key=0; break;

case 0xde: key=1; break;

case 0xbe: key=2; break;

case 0x7e: key=3; break;

12

}

while(temp!=0xf0) {

temp=P3;

temp=temp&0xf0; beep=0; }

beep=1; display(key); // P0=table[key]; /* P0=0xff; dula=1;

while(i--); dula=0; P0=0xc0; wela=1; wela=0; dula=0; wela=0; P0=0xff; dula=1; dula=0; P0=0xc5; wela=1; wela=0; */

P1=0xfe; } }

P3=0xfd; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(10); if(temp!=0xf0) {

13

temp=P3; switch(temp) {

case 0xed: key=4; break;

case 0xdd: key=5; break;

case 0xbd: key=6; break;

case 0x7d: key=7; break; }

while(temp!=0xf0) {

temp=P3;

temp=temp&0xf0; beep=0; }

beep=1;

display(key); /* P0=table[key]; dula=1;

// while(100--); dula=0; P0=0xc0; wela=1; wela=0; */ P1=0xfc; } }

14

P3=0xfb; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(10); if(temp!=0xf0) {

temp=P3; switch(temp) {

case 0xeb: key=8; break;

case 0xdb: key=9; break;

case 0xbb: key=10; break;

case 0x7b: key=11; break; }

while(temp!=0xf0) {

temp=P3;

temp=temp&0xf0; beep=0; }

beep=1; display(key); /* P0=table[key]; dula=1;

15

// while(100--); dula=0; P0=0xc0; wela=1; wela=0; */ P1=0xf8; } }

P3=0xf7; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(10); if(temp!=0xf0) {

temp=P3; switch(temp) {

case 0xe7: key=12; break;

case 0xd7: key=13; break;

case 0xb7: key=14; break;

case 0x77: key=15; break; }

while(temp!=0xf0) {

16

temp=P3;

temp=temp&0xf0; beep=0; }

beep=1; display(key); /* P0=table[key]; dula=1;

// while(100--); dula=0; P0=0xc0; wela=1; wela=0; */ P1=0xf0; } } } }

六、实验小结和体会

17

实验六 数码管显示实验

一、实验目的

1.熟悉并掌握数码管显示原理。 2.掌握单片机定时器的应用。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

数码上循环显示0~F,循环间隔为2S。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果

#include #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; int count; int ywei; uchar

table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void init(); void main() {

init(); ywei=0; wela=1; P0=0xC0; count=0; wela=0; dula=1;

18

P0=table[ywei++]; dula=0; while(1) { if(count==40) { count=0; dula=1; P0=table[ywei++]; dula=0; if(ywei==16) {

ywei=0; } } } }

void init() {

TMOD=0x10;

TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET1=1; EA=1; TR1=1; }

void timer1() interrupt 3 {

TH1=(65536-50000)/256; TL1=(65536-50000)%256; count++; }

六、实验小结和体会

19

实验七 A/D转换实验

一、实验目的

掌握0809A/D转换芯片的硬件电路和软件编程。 二、实验环境

硬件平台:TX-1C单片机学习板。 软件平台:keil软件 三、实验内容与要求

调节可变电阻,通过发光二极管读出转换的对应数字量。 四、实验预习和准备

参考相关书籍,掌握TX-1C单片机学习板原理图。 五、实验过程与结果

//拧动电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。

//有些拧动电位器后数码管数可能不会动态变化,请用户按下实验板上的S22复位按键可更新数据

//这种显象产生的原因是和AD芯片自身的一些特性有关。 #include #include #define uint unsigned int #define uchar unsigned char

sbit adrd=P3^7; sbit adwr=P3^6; sbit diola=P2^5; sbit dula=P2^6; sbit wela=P2^7;

unsigned char j,k,adval;

void delay(unsigned char i) {

for(j=i;j>0;j--)

for(k=125;k>0;k--); }

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, /

20

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void display(uchar bai_c,uchar sh_c,uchar g_c) {

P0=table[bai_c]; dula=1; dula=0;

P0=0xfe; wela=1; wela=0; delay(5);

dula=0;

P0=table[sh_c]; dula=1; dula=0;

wela=0; P0=0xfd; wela=1; wela=0; delay(5);

P0=table[g_c]; dula=1; dula=0;

P0=0xfb; wela=1; wela=0; delay(5); }

void main() {

21

uchar a,A1,A2,A2t,A3; while(1) {

wela=1;

P0=0; adwr=0; _nop_(); adwr=1;

P0=0xff; delay(10);

wela=0; for(a=20;a>0;a--)

{ display(A1,A2,A3); }

wela=1; P1=0xff; P0=0; adrd=0; adval=P1; adrd=1;

P0=0xff; adwr=0;

P1=adval; A1=adval/100; A2t=adval%100; A2=A2t/10; A3=A2t%10; }; }

六、实验小结和体会

22

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务