汉字LED点阵显示.doc
efan23:04:26有对汉字LED点阵显示熟悉的朋友吗?要下雨了23:04:51什么问题typhoon23:04:54恩efan23:05:11有段程序看不太懂efan23:05:26#include<reg52.h>#defineint8unsignedchar#defineint16unsignedint#defineint32unsignedlongint8flag;int8n;int8codetable32=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,/*""*/0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00,/*"欢",0*/0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00,/*"迎",1*/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/*""*/;voiddelay(void);int16offset;voidmain(void)int8i;int8*p;flag=0x10;n=0;TMOD=0x01;TH0=0xb1;TL0=0xe0;ET0=1;EA=1;TR0=1;p=&table00;while(1)for(i=0;i<8;i+)/显示左半边屏幕P0=*(p+offset+2*i);P2=i|0x08;/P2.4=0,P2.3=1选中U2,输出扫描码给U6delay();P0=*(p+offset+2*i+1);P2=i|0x10;/P2.4=1,P2.3=0选中U3,输出扫描码给U7delay();for(i=8;i<16;i+)/显示右半边屏幕P0=*(p+offset+2*i);P2=(i-8)|0x20;/P2.5=1P2.4=0,P2.3=0选中U4,输出扫描码U8delay();P0=*(p+offset+2*i+1);P2=(i-8)|0x40;/P2.6=1P2.5=0,P2.4=0选中U5,输出扫描码U9delay();voiddelay(void)int16i;for(i=0;i<50;i+);voidtimer0()interrupt1using3TF0=0;TH0=0xb1;TL0=0xe0;if(n<10)n+;elseoffset+=2;if(offset>1100)offset=0;n=0;efan23:05:57程序有两个地方不太明白1.P0=*(p+offset+2*i);为什么要乘以2,原理是什么?2.voidtimer0()interrupt1using3这个中断是为了产生offset的原理是什么,为什么能实现汉字的移动显示(从右至左)efan23:07:31这段程序实现汉字从左到右滚动显示狂人23:07:38116*16的点阵2每扫一次偏移地址加2efan(6939780)23:08:35能具体一点吗?efan(6939780)23:09:221。里面还加了个offset,为什么能实现跑马显示狂人(63637313)23:09:23每行16个led,当然要用2个字节,这个明白吧efan(6939780)23:09:38这个懂了狂人(63637313)23:10:33中断一次,数据整体下移一行,有问题吗?efan(6939780)23:10:51我想想。efan(6939780)23:12:23不理解,是不是指offset+=2?要下雨了(422583941)23:12:58是吧狂人(63637313)23:13:11我没仔细看太长了你明白了原理再看程序就简单了efan(6939780)23:13:39他是左跑马,为何下移动阿?狂人(63637313)23:14:09我随便说的efan(6939780)23:14:18狂人(63637313)23:14:58要下雨了(422583941)23:15:00向左跑就是说逐步去掉左边的一些代码不要要下雨了(422583941)23:15:44第一列的数据逐步往右边取efan(6939780)23:17:17对照汉字码看一下0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00,/*"欢",0*/起始为0x04,0x28中断一次,跳到哪个了?是不是0x08,0x24?要下雨了(422583941)23:17:38是的要下雨了(422583941)23:17:51第一列就显示了0x08,0x24要下雨了(422583941)23:18:18你这个程序运行对了没有efan(6939780)23:19:03跑了,proteus没问题要下雨了(422583941)23:19:12哦要下雨了(422583941)23:19:12哦要下雨了(422583941)23:19:36明白了吗狂人(63637313)23:20:18你单步跑下就更清楚了efan(6939780)23:20:20程序还有点点不明白,原理晓得了