完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include __CONFIG(HS&WDTDIS&LVPDIS); const unsigned char han1[]= { //定义表格一定要使用const,这样会做到程序存储区中 /*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/ /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: L --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0, /*-- 文字: O --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0xF0,0x08,0x08,0x30,0x30,0x08,0x08,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: V --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: E --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/ /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; const unsigned char han2[]= { //定义表格一定要使用const,这样会做到程序存储区中 /*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/ /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: L --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07, /*-- 文字: O --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x0F,0x18,0x30,0x60,0x60,0x30,0x18,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: V --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: E --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 因为移动汉字,所以首尾都填充一些0 --*/ /*-- Trebuchet MS12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //--------------------------------------- //LED点阵屏相关I/O设置 #define U7E RB3 //LED点阵屏单元的U7(74HC138)的使能端E脚接在RB3口上 #define U6E RB4 //LED点阵屏单元的U6(74HC138)的使能端E脚接在RB4口上 //LED点阵屏寄存器设置 unsigned char m; //设置8位的unsigendchar型寄存器用来做汉字显示的索引 unsigned char n; //设置8位的unsigendchar型寄存器用来做延时用 unsigned char w; //设置8位的unsigendchar型寄存器用来做延时用 unsigned int v; //设置8位的unsigend char型寄存器用来做移动索引 void DispLEDdot(void) { if(++m>15) m=0; //每调用一次函数将m加1,并限制在0-15以内 PORTB=0; //将LED点阵屏的列控制信号全部清零,准备重置 PORTC=han1[m+v]; //LED点阵屏的上半屏,按m+v索引查表送PROTC PORTD=han2[m+v]; //为LED点阵屏的下半屏,按m+v索引查表送PROTD PORTB|=m&0x07; //将索引m的低3位送给PROTB的低3位,以使74HC138去片选 if(m<8) U6E=1; //前8列的使能U6(74HC138) else U7E=1; //后8列的使能U7(74HC138) } void main(void) //主函数,单片机开机后就是从这个函数开始运行 { TRISB=0B11100000; //初始化RB7-RB0的输入输出方向 TRISC=0B00000000; //初始化RC7-RC0的输入输出方向 TRISD=0B00000000; //初始化RD7-RD0的输入输出方向 PORTB=0B00000000; //初始化RB7-RB0的数值 PORTC=0B00000000; //初始化RC7-RC0的数值 PORTD=0B00000000; //初始化RD7-RD0的数值 while(1) //死循环,单片机初始化后,将一直运行这个死循环 { for(n=0;n<80;n++); //做一个0-80的循环,不执行其他操作,只为延时 if(++w>80) //再嵌套一个延时,每80个扫描周期将汉字左移一格 { w=0; //清零,以准备下一个延时 if(++v>311) v=0;//移动索引,限定在0-191 } DispLEDdot(); //调用LED点阵屏显示函数 } } 注:1)love左移 2)16x16点阵3)取模倒叙,纵向 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2077 浏览 1 评论
3497 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2330 浏览 2 评论
2755 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4014 浏览 5 评论
962浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6347浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 10:53 , Processed in 0.562572 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号