v .. . ..
/* 返回代码: 无 */ /* 参数说明: 无 */ /****************************************************************************/
void Test_Seg7(void) { int i;
*((U8*)0x20007000)=0x00; for(;;) {
*((U8*)0x20007000)=0x1f; *((U8*)0x20006000)=seg7table[0]; Delay(10000); *((U8*)0x20007000)=0x2f; *((U8*)0x20006000)=seg7table[1]; Delay(10000); *((U8*)0x20007000)=0x37; *((U8*)0x20006000)=seg7table[2]; Delay(10000); *((U8*)0x20007000)=0x3b; *((U8*)0x20006000)=seg7table[3]; Delay(10000); *((U8*)0x20007000)=0x3d; *((U8*)0x20006000)=seg7table[4]; Delay(10000); *((U8*)0x20007000)=0x3e; *((U8*)0x20006000)=seg7table[5]; Delay(1); } // 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 . . . 资 料. */ */ */ */ . v .. . .. /****************************************************************************/ /*文件名称: 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段数码管各自递增显示0—9 */ /* 返回代码: 无 */ /* 参数说明: 无 */ /****************************************************************************/ void Test_Seg7(void) { int i; for(;;) { for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x1f; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x2f; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x37; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { . . . 资 料. . v .. . .. *((U8*)0x20007000)=0x3b; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x3d; *((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 六、 实验结果与分析 实验一结果:六个数码管同时显示相同的符号,从0-F再由F-0之间的循环变换。 分析:在数码管扫描控制地址处选中六个数码管,使其同时亮,在给其数 码管的数据寄存器存入不同符号对应的数值,加上相应的延迟,就可以是轮流变换的循环的符号变换。 实验二结果:第一个数码管显示Z后,第二个显示H,接着第三个显示A,接着 第四个显示n,接着第五个显示g,接着第六个显示g,接着第一个再显示Z…..如此循环。 分析:设置控制地址使其单独并且循环显示,每个数码管的数据寄存器送 . . . 资 料. . v .. . .. 入不同的符号的数值,并设置较大的延迟时间即可产生该现象。 实验三结果:六个数码管一起显示“ZHAngg”。 分析:原理同实验二,只是将延迟时间改小到人眼无法分辨的地步即使一 起显示。 实验四结果:第一个数码管显示0—9之后,第二个接着显示0—9,接着第三个, 第四个…. 分析:设置循环使六个数码管循环单独显示,在每个数码管显示中再加入 循环,使其递增显示0—9,设置较大的延迟,是我们可以看清实验现象。 七、 实验总结与心得体会 本次试验需要了解数码管的基本工作原理,基于C语言设计编程完成实验,实验的关键在于把握实现各种现象的本质上的差异,在程序上作出修改。通过本次试验对于实验的严谨性有了进一步的体验,稍有不小心实验结果就适得其反,以后要更加用心,更加认真的做实验。 . . . 资 料. .
单片机数码管显示实验



