单片机上机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
姓名:
班级:
学号:
实验一数码管实验
一、实验目的
1. 了解数码管的显示原理;
2. 掌握JXARM9-2440 中数码管显示编程方法。
二、实验仪器
JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、PC 机。
三、实验原理
7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
LED显示器的接口一般有静态显示与动态显示接口两种方式。
本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x20007000,位0-位5每位分别对应一个数码管,将其中某位清0 来选择相应的数码管,地址0x20006000 为数码管的数据寄存器。数码管采用共阳方式,向该地址写一个数据就可以控制LED 的显示,其原理图如图所示。
四、实验内容及步骤
1、六个数码管同时正向显示0-F ,然后反向显示F-0。
1)参照模板工程led(modules\led\led.apj),新建一个工程led,添加相应的文件,并修改led 的工程设置;
2)创建led.c 并加入到工程led 中;
3)编写LED 显示函数void led_display(void),正向显示0-F 然后反向显示F-0,并循环执行以上动作,在每次显示之间延时一段时间;
4)编译led,成功后,下载并运行,观察结果。
2、在六个数码管上依次显示“HELLO”,可分辨出轮流显示。步骤同上。
3、在六个数码管上依次显示“HELLO”,分辨不出轮流显示。步骤同上。
*4、在每个数码管上递增显示0-9 。步骤同上。
五、实验程序
/******************************************************************** ********/
/*文件名称:LEDSEG7.C */
/*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F */ /******************************************************************** ********/
#define U8 unsigned char
unsigned char seg7table[16] = {
/* 0 1 2 3 4 5 6 7*/
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
/* 8 9 A B C D E F*/
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
};
void Delay(int time);
/******************************************************************** ********/
/* 函数说明: JXARM9-2410 7段构共阳数码管测试*/
/* 功能描述: 依次在7段数码管上显示0123456789ABCDEF */
/* 返回代码: 无*/
/* 参数说明: 无*/
/******************************************************************** ********/
void Test_Seg7(void) {
int i;
*((U8*)0x20007000) = 0x00;
for(; ;)
{
for(i=0;i<0x10;i++)
{
*((U8*)0x20006000)=seg7table[i];
Delay (10000);
}
for(i=0xf;i>=0x0;i--)
{
*((U8*)0x20006000)=seg7table[i];
Delay (10000);
}
}
// TODO
}
/******************************************************************** ********/
/* Function name : 循环延时子程序*/
/* Description : 循环'time' 次*/
/* Return type :void */
/* Argument : 循环延时计数器*/
/******************************************************************** ********/
void Delay(int time) {
int i;
int delayLoopCount=10000;
for(;time>0;time--);
for(i=0;i } void Test_Seg7(void) { int i; for(; ;) { *((U8*)0x20007000) = 0x3E; *((U8*)0x20006000)=seg7table[5]; Delay (10000); *((U8*)0x20007000) = 0x3D; *((U8*)0x20006000)=seg7table[4]; Delay (10000); *((U8*)0x20007000) = 0x3B; *((U8*)0x20006000)=seg7table[3]; Delay (10000); *((U8*)0x20007000) = 0x37; *((U8*)0x20006000)=seg7table[2];