找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1562|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)驅(qū)動漢字LED點陣相關(guān)問題解答

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:266504 發(fā)表于 2017-12-25 14:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
efan 23:04:26
有對漢字LED點陣顯示熟悉的朋友嗎?  
要下雨了 23:04:51
什么問題
typhoon 23:04:54
efan 23:05:11
有段程序看不太懂
efan 23:05:26
#include <reg52.h>
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={

{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}/*
" " */
                      };
void delay(void);
int16 offset;
void main(void)
{
   int8 i;
   int8 *p;
    flag=0x10;
   n=0;
   TMOD=0x01;
   TH0=0xb1;
   TL0=0xe0;
   ET0=1;
   EA=1;
   TR0=1;
   p=&table[0][0];
   while (1)
    {
       for (i=0;i<8;i++)    //顯示左半邊屏幕
       {
           P0=*(p+offset+2*i);
           P2=i|0x08;    //P2.4=0,P2.3=1 選中U2, 輸出掃描碼給U6
           delay();
           P0=*(p+offset+2*i+1);
           P2=i|0x10;   //P2.4=1,P2.3=0 選中U3, 輸出掃描碼給U7
           delay();
       }
       for (i=8;i<16;i++)     //顯示右半邊屏幕
       {
           P0=*(p+offset+2*i);
           P2=(i-8)|0x20;   //P2.5=1 P2.4=0,P2.3=0 選中U4,輸出掃描碼U8
           delay();
           P0=*(p+offset+2*i+1);
           P2=(i-8)|0x40;   //P2.6=1 P2.5=0,P2.4=0 選中U5,輸出掃描碼U9
           delay();
       }
    }
}
void delay(void)
{
   int16 i;
   for (i=0;i<50;i++)
       ;
}
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
這個中斷是為了產(chǎn)生offset的原理是什么,為什么能實現(xiàn)漢字的移動顯示(從右至左)
efan 23:07:31
這段程序?qū)崿F(xiàn)漢字從左到右滾動顯示
╄→狂人╰☆ 23:07:38
1 16*16的點陣
2  每掃一次偏移地址加2
efan(6939780) 23:08:35
能具體一點嗎?
efan(6939780) 23:09:22
1。里面還加了個 offset, 為什么能實現(xiàn)跑馬顯示
╄→狂人╰☆(63637313)23:09:23
每行16led,當(dāng)然要用2個字節(jié),這個明白吧
efan(6939780) 23:09:38
這個懂了
╄→狂人╰☆(63637313)23:10:33
中斷一次,數(shù)據(jù)整體下移一行,有問題嗎?
efan(6939780) 23:10:51
我想想。。。
efan(6939780) 23:12:23
不理解,是不是指offset+=2?
要下雨了(422583941)23:12:58
是吧
╄→狂人╰☆(63637313)23:13:11
我沒仔細(xì)看 太長了
你明白了原理再看程序就簡單了
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
第一列的數(shù)據(jù)逐步往右邊取
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
你這個程序運(yùn)行對了沒有
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口發(fā)漢字碼,p1口輸出掃描碼

漢字LED點陣顯示.doc

26.5 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5

漢字led

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表