数码管

实验目的
1.了解数码管的工作原理;
2.掌握使用CC 2530 IO口控制数码管的显示和编程实现;
3.进一步熟悉IAR的使用;
实验需求
安装IAR和相关驱动的个人PC1台
迷你USB线mini USB1根
仿真器CC Debugger1根
ZigBee通用节点板1块
实验步骤
1.创建IAR工作空间;
2.创建基于C的IAR工程;
3.配置工程;
4.编辑代码并调试[无差错;无告警];
5.试验箱上电;使用mini USB分别连接CC Debugger和PC;并将仿真器CC Debugger的另外一端和ZigBee通用节点板上的JTAG插座相连;按下仿真器CC Debugger的复位按钮,绿灯常亮表示模块连接成功,可以往芯片中烧写程序;
6.在IAR中点击,download and debug(CTRL+D)烧写程序;
7.在IAR的调试窗口中,点击开始运行:观察数码管的显示;
开发过程中,请注意CTRL+S保存项目!
参考源码

    #include "ioCC2530.h"
    #include "../lib/delay.h"

    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
    };
    
    unsigned char i;
    
    void SegInit()
    {
        P1INP &= ~( 0x1 << 2 );     //P1.2上拉
        P1SEL &= ~( ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 2 ) ); //P1.0,P1.1,P1.2为GPIO
        P1DIR |= ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 2 );      //P1.0,P1.1,P1.2为OUTPUT
        P0SEL &= ~( 1 << 4 );       //P0.4为GPIO
        P0DIR |= ( 1 << 4 );        //P0.4为OUTPUT
        //74HC595初始化
        P1 |= ( 0x1 << 0 );         //P1.0 CLR, 复位
        P1 |= ( 0x1 << 1 );         //P1.1 DATA,数据寄存器
        P1 |= ( 0x1 << 2 );         //P1.2 CLK,位移寄存器时钟输入
        P0 |= ( 0x1 << 4 );         //P0.4 LOCK,数据寄存器开始时钟
    }
    
    void SendSeg7( unsigned char value )
    {
        unsigned char i;
        P0 &= ~( 0x1 << 4 );        //P0.4 LOCK
        P1 &= ~( 0x1 << 2 );        //P1.2 CLK
        P1 &= ~( 0x1 << 1 );        //P1.1 DATA
        //将数据value的8个bit按串行方式分时赋值P1.1,P1.2控制时钟值高时读取P1.1
        for( i = 0; i < 8; i++ )
        {
            if( value & 0x80 )
            {
                P1 |= ( 0x1 << 1 );         //P1.1值1,DATA
            }
            else
            {
                P1 &= ~( 0x1 << 1 );        //P1.1值0,DATA
            }
            value <<= 1;
            P1 &= ~( 0x1 << 2 );    //P1.2 CLK
            P1 |= ( 0x1 << 2 );     //P1.2 CLK
        }
        P0 &= ~( 0x1 << 4 );        //P0.4 LOCK
        P0 |= ( 0x1 << 4 );         //P0.4 LOCK
    }
    
    void main( void )
    {
        SegInit();
    
        while( 1 )
        {
            for( int i = 0; i < 0x10; ++i )
            {
                SendSeg7( seg7table[i] ); //循环显示0-F
                delay( 2000 );
            }
            SendSeg7( 0xff );
            delay( 200 );
        }
    }                    
                
项目提升
请使用宏和函数优化代码,使其符合模块化开发,同时可读性更强;
实验报告
1. 根据实操部分的内容,完成数码管项目;
2. 以纸质的形式提交实验报告;
3. 论文格式请参照范文[点击下载]