单片机实验报告班级:1304031学号:姓名:实验一:数码管实验一.实验目的1.了解数码管的显示原理;2.掌握JXARM9-2440中数码管显示编程方法。二.实验原理7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。LED显示器的接口一般有静态显示与动态显示接口两种方式。本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x20007000,位0-位5每位分别对应一个数码管,将其中某位清0来选择相应的数码管,地址0x20006000为数码管的数据寄存器。数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示,其原理图如图所示。三.实验内容及步骤1、六个数码管同时正向显示0-F,然后反向显示F-0。1)参照模板工程leddemo(modules\leddemo\leddemo.apj),添加相应的文件,并修改led的工程设置;2)创建led.c并加入到工程led中;3)编写LED显示函数voidled_display(void),正向显示0-F然后反向显示F-0,并循环执行以上动作,在每次显示之间延时一段时间;4)编译led,成功后,下载并运行,观察结果。2、在六个数码管上依次显示“HELLO”,可分辨出轮流显示。步骤同上。3、在六个数码管上依次显示“HELLO”,分辨不出轮流显示。步骤同上。4、在每个数码管上递增显示0-9。步骤同上。四.实验程序1、./*******************************************************************//*文件名称:LEDSEG7.C*//*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F*//*******************************************************************/#defineU8unsignedcharunsignedcharseg7table[16]={/*01234567*/0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,/*89ABCDEF*/0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};voidDelay(inttime);/*******************************************************************//*函数说明:JXARM9-24107段构共阳数码管测试*//*功能描述:依次在7段数码管上显示0123456789ABCDEF*//*返回代码:无*//*参数说明:无*//*******************************************************************/voidTest_Seg7(void){inti;*((U8*)0x20007000)=0x00;/*六个数码管都亮*/for(;;){for(i=0;i0x10;i++)/*数码管从0到F依次显示出来*/{*((U8*)0x20006000)=seg7table[i];Delay(1000);}for(0xf;i=0x0;i--)/*数码管从F到0依次显示出来*/{*((U8*)0x20006000)=seg7table[i];Delay(1000);}}//TODO}/*****************************************************************//*Functionname:循环延时子程序*//*Description:循环'time'次*//*Returntype:void*//*Argument:循环延时计数器*//*****************************************************************/voidDelay(inttime){inti;intdelayLoopCount=1000;for(;time0;time--);for(i=0;idelayLoopCount;i++);}实验结果:6个数码管上一次显示0,1,2…F,然后从F到0循环。2./*******************************************************************//*文件名称:LEDSEG7.C*//*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F*//*******************************************************************/#defineU8unsignedcharunsignedcharseg7table[4]={/*OLEH*/0xC0,0xC7,0x86,0x89};voidDelay(inttime);/*******************************************************************//*函数说明:JXARM9-24107段构共阳数码管测试*//*功能描述:依次在7段数码管上显示0123456789ABCDEF*//*返回代码:无*//*参数说明:无*//******************************************************************/voidTest_Seg7(void){for(;;){*((U8*)0x20007000)=0x3E;//**111110*((U8*)0x20006000)=seg7table[0];//第一个数码管显示ODelay(1000);*((U8*)0x20007000)=0x3D;//**111101*((U8*)0x20006000)=seg7table[1];//第二个数码管显示LDelay(1000);*((U8*)0x20007000)=0x3B;//**111011*((U8*)0x20006000)=seg7table[1];//第三个数码管显示LDelay(1000);*((U8*)0x20007000)=0x37;//**110111*((U8*)0x20006000)=seg7table[2];//第四个数码管显示EDelay(1000);*((U8*)0x20007000)=0x2F;//**101111*((U8*)0x20006000)=seg7table[3];//第五个数码管显示HDelay(1000);}}//TODO/*******************************************************************//*Functionname:循环延时子程序*//*Description:循环'time'次*//*Returntype:void*//*Argument:循环延时计数器*//*******************************************************************/voidDelay(inttime){inti;intdelayLoopCount=1000;for(;time0;time--);for(i=0;idelayLoopCount;i++);}实验结果:从左到右一次显示HELLO,之间有明显延迟。3./*******************************************************************//*文件名称:LEDSEG7.C*//*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F*//*******************************************************************/#defineU8unsignedcharunsignedcharseg7table[4]={/*OLEH*/0xC0,0xC7,0x86,0x89};voidDelay(inttime);/*******************************************************************//*函数说明:JXARM9-24107段构共阳数码管测试*//*功能描述:依次在7段数码管上显示0123456789ABCDEF*//*返回代码:无*//*参数说明:无*//*****************************************************************/voidTest_Seg7(void){for(;;){*((U8*)0x20007000)=0x3E;//**111110*((U8*)0x20006000)=seg7table[0];//第一个数码管显示ODelay(5);*((U8*)0x20007000)=0x3D;//**111101*((U8*)0x20006000)=seg7table[1];//第二个数码管显示LDelay(5);*((U8*)0x20007000)=0x3B;//**111011*((U8*)0x20006000)=seg7table[1];//第三个数码管显示LDelay(5);*((U8*)0x20007000)=0x37;//**110111*((U8*)0x20006000)=seg7table[2];//第四个数码管显示EDelay(5);*((U8*)0x20007000)=0x2F;//**101111*((U8*)0x20006000)=seg7table[3];//第五个数码管显示HDelay(5);}}//TODO/*******************************************************************//*Functionname:循环延时子程序*//*Description:循环'time'次*//*Returntype:void*//*Argument:循环延时计数器*//******************************************************************/voidDelay(inttime){inti;intdelayLoopCount=5;for(;time0;time--);for(i=0;idelayLoopCount;i++);}实验结果:数码管上显示HELLO,几乎无延迟,同时显示。4./*****************************************************************//*文件名称:LEDSEG7.C*//*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F*//*****************************************************************/#defineU8unsignedcharunsignedcharseg7table[10]={/*0,1,2,3,4,5,6,7,8,9*/0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voidDelay(inttime);/******************************************************************//*函数说明:JXARM9-24107段构共阳数码管测试*//*功能描述:依次在7段数码管上显示0123456789ABCDEF*//*返回代码:无*//*参数说明:无*//**********************************