辜渝傧

13037102709

027-87870986

教学实训

您当前的位置:首页 > 教学资源 > 实训方案 >

无线传感网络实训|实验4.3 LED点阵实验

发布者:唯众    布时间:2020-12-01 14:06:45    点击量:

1.实验目的

1)、通过实验掌握点阵的驱动原理
2)、掌握字库字模的生成以及变换

2.实验设备

硬件:PC机1台、ZIGBEE节点板1套(底板、核心板、仿真器、USB 线)
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境

3.实验相关电路图

LED点阵实验

4.实验相关寄存器

5.源码分析

#include
#include
#include
 
#include "DHT11.h"
#include "OLED.h"
#include "hal_max7219.h"
 
uchar ExternFlag=0;
 
void clock_setup(void)
{
       CLKCONCMD &= ~0x40;                         //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                    //等待晶振稳定
    CLKCONCMD &= ~0x47;                         //设置系统主时钟频率为32MHZ
}
void init_sensor_io(void)
{
       //1.设置IO为普通IO
       P0SEL  |= 0xC0;
       P1SEL  |= 0x07;
      
       //2.设置编码口为输入
       P0DIR &= ~0xC0;
       P1DIR &= ~0x07;
}
 
uchar get_sensor_id(void)
{            
       volatile uchar temp = P0_6<<4|P0_7<<3|P1_0<<2|P1_1<<1|P1_2;    
       return temp;
}
 
/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)

       uchar disp[]="实验人体红外声音";//点阵需要显示的汉字,需包含在字库中的汉字才能显示
       uchar temp8,i;
    uchar buf[16];
       uchar chinese[3];
       clock_setup();                         //系统时钟设置,精确延时必须要设置
    Delay_ms(1000);          //让设备稳定
      
       port_init();
       initial_lcd(); 
      
       Init_MAX7219();
      
       clear_screen();                                                            //清屏
       disp_string_8x16_16x16(1,1,"武汉唯众智创科技");       //显示字符串,括号里的参数分别为(PAGE,列,字符串指针)
       disp_string_8x16_16x16(3,1,"----实验3.3-----");
       Delay_ms(1000);
      
    while(1)
    {                
              ChineseUpdate(disp);               //最多转换8个汉字             
              for(i=0;i<8;i++){                
                     chinese[0] = disp[i*2];
                     chinese[1] = disp[i*2+1];
                     chinese[2] = '\0';              
                     clear_screen();   
                     temp8 = get_sensor_id();
                     sprintf(buf,"编号: %d",temp8);
                     disp_string_8x16_16x16(1,1,buf);                     
                     sprintf(buf,"当前显示: %s",chinese);
                     disp_string_8x16_16x16(3,1,buf);
                    
                     Display_Dianzhen(4+i*4,3000);      //点阵显示函数
              }
    }
}

6.实验现象

       16*16点阵依次显示“实验人体红外声音”。用户可以自己修改汉字,但必须确保字库中有对应的字模,如果没有请使用字模生成工具生成并添加到字库文件中。具体操作方法请参考实验2.1。为了节省本实验中点阵使用的字库跟OLED使用的字库是同一个字库,但实际上两个字模是有区别的,OLED的取模方式是“阴码、逆向、列行式”,而点阵的取模方式是“阴码、逆向、行列式”,笔者通过观察分析两者的区别,使用一个函数让其可以相互转换,有兴趣的读者可以了解先该函数的实现方法。

LED点阵实验


上一篇:无线传感网络实训|实验4.2 语音识别实验

下一篇:无线传感网络实训|实验4.4 电量仪实验