|
本帖最后由 AllBlue 于 2020-3-31 07:55 编辑
测试视频:http://v.youku.com/v_show/id_XNTczNDg3NDA4.html
点阵模块的原理图:
方案为:2片74HC164(行)+2片74HC595(列)
下面给出arduino示例代码,用户可通过改变代码中的table1-4数组来改变显示内容,字符生成代码见附件下载,下有使用教程。
- /*16*16点阵屏的显示*/
- /*******************
- PIN -- 点阵
- -------------------
- DATA -- Ser
- SCLH -- Srck
- SCLT -- rck
- AB -- ab
- SC -- ck
- *******************/
- int DATA=3; //列数据输出位
- int SCLH=4; //列扫描时钟位
- int SCLT=5; //列数据锁存位
- int AB =6; //行数据输出位
- int SC=7; //行扫描时钟位
- unsigned char i=0,j=0;
- unsigned char date[32]; //32字节RAM做为16*16点阵屏显示缓存
- void setup() {
- // initialize the digital pin as an output.
- pinMode(DATA, OUTPUT);
- pinMode(SCLH, OUTPUT);
- pinMode(SCLT, OUTPUT);
- pinMode(AB, OUTPUT);
- pinMode(SC, OUTPUT);
- }
- int table1[32]={
- 0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xFC,0x02,0x00,0x02,0x00,0x3F,0xF0,0x20,0x10,
- 0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x24,0x88,0x22,0x44,0x42,0x44,0x80,0x04};/*"点"*/
- int table2[32]={
- 0x00,0x40,0x7C,0x40,0x44,0x40,0x4B,0xFE,0x48,0x80,0x50,0xA0,0x49,0x20,0x49,0xFC,
- 0x44,0x20,0x44,0x20,0x44,0x20,0x6B,0xFE,0x50,0x20,0x40,0x20,0x40,0x20,0x40,0x20};/*"阵"*/
- int table3[32]={
- 0x00,0x04,0x27,0xC4,0x14,0x44,0x14,0x54,0x85,0x54,0x45,0x54,0x45,0x54,0x15,0x54,
- 0x15,0x54,0x25,0x54,0xE5,0x54,0x21,0x04,0x22,0x84,0x22,0x44,0x24,0x14,0x08,0x08};/*"测"*/
- int table4[32]={
- 0x00,0x28,0x20,0x24,0x10,0x24,0x10,0x20,0x07,0xFE,0x00,0x20,0xF0,0x20,0x17,0xE0,
- 0x11,0x20,0x11,0x10,0x11,0x10,0x15,0x10,0x19,0xCA,0x17,0x0A,0x02,0x06,0x00,0x02};/*"试"*/
- /* 显示函数 */
- void display()
- {
- unsigned char i,ia,j,tmp; //定义变量
- digitalWrite(AB,LOW); //将行数据位清0,准备移位
- for(i=0;i<=16;i++) //循环输出16行数据
- {
- digitalWrite(SC,LOW); //为行移位做准备
- digitalWrite(SCLT,LOW); //为列锁存做准备
- for(ia=2;ia>0;) //每行16个点,循环位移两个字节,循环两次
- {
- ia--;
- tmp=~date[i*2+ia]; //读取点阵数据做输出,
- shiftOut(DATA,SCLH,LSBFIRST,tmp); //将DATA上的数据移入寄存器
- }
- PORTD |= 0xa0; //移入两个字节结束,SCK\SCLT拉高.
- digitalWrite(AB,HIGH); //行数据位只在第一行时为0,其它时候都为1
- //移位的过程,AB就必需是1
- }
- j=64;
- while(j--); //每一行的显示,保持两个字节的移位时间
- digitalWrite(SC,LOW);
- digitalWrite(SC,HIGH); //将最后一行数据移出
- }
- /* timer=1时,为1s左右的延时 */
- void display_time(unsigned int timer) //指定时间扫描显示
- {
- unsigned char i;
- while(timer--)
- {
- i=110;
- while(i--)
- display();
- }
- }
- void disp()
- {
- for(i=0;i<32;i++)
- date[i]=table1[i];//将"点"字数据复制到显示缓存
- display_time(2); //显示约2秒
-
- for(i=0;i<32;i++)
- date[i]=table2[i];//将"阵"字数据复制到显示缓存
- display_time(2); //显示约2秒
- for(i=0;i<32;i++)
- date[i]=table3[i];//将"测"字数据复制到显示缓存
- display_time(2); //显示约2秒
- for(i=0;i<32;i++)
- date[i]=table4[i];//将"试"字数据复制到显示缓存
- display_time(2); //显示约2秒
- }
- void loop()
- {
- disp();
- }
复制代码 字符生成方法如下,下载附件中的点阵生成工具,打开软件,“模式”里面选择“字符模式”
点击“选项”,进行如下设置,完成后点确定:
在如图输入框中输入要取模的汉字,点“生成字模”
将生成的数组替换到上面的示例代码中就可以更改显示内容了!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|