void timer0() interrupt 1 using 3
{
TF0=0;
TH0=0xb1;
TL0=0xe0;
if (n<10)
{
n++;
}
else
{
offset+=2;
if (offset>1100)
offset=0;
n=0;
}
}
efan 23:05:57
程序有两个地方不太明白
1. P0=*(p+offset+2*i);
为什么要乘以2,原理是什么?
2.void timer0() interrupt 1 using 3
这个中断是为了产生offset的原理是什么,为什么能实现汉字的移动显示(从右至左)
efan 23:07:31
这段程序实现汉字从左到右滚动显示
╄→狂人╰☆ 23:07:38
1 16*16的点阵
2 每扫一次偏移地址加2
efan(6939780) 23:08:35
能具体一点吗?
efan(6939780) 23:09:22
1。里面还加了个 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,0x
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
程序还有点点不明白,原理晓得了
efan(6939780) 23:38:59
我说一下算了,电路很简单,p0口发汉字码,p1口输出扫描码
本文关键字:暂无联系方式自动控制-单片机,电子制作 - 自动控制-单片机