標題:
P10廣告牌移動單片機程序
[打印本頁]
作者:
羅正男
時間:
2017-7-8 23:43
標題:
P10廣告牌移動單片機程序
很久以前寫P10的程序用51單片機寫的!作為紀念分享給更多需要的人!
單片機源程序如下:
/******************************************************************
* *
* P10 Moving LED Demo Program 2012/2/2 *
* *
* 作者: DSL *
* *
******************************************************************/
#include <reg51.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/***********************字點陣碼*************************/
uchar code CharTable[]=
{
//0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"黑屏"*/
0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"0"*/
0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF,/*"1"*/
0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0xFF,0xFF,/*"2"*/
0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,/*"3"*/
0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0xFF,0xFF,/*"4"*/
0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,/*"5"*/
0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6"*/
0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,/*"7"*/
0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8"*/
0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF,/*"9"*/
};
sbit RCK_595 = P2^0; //輸出鎖存器控制脈沖(L)
sbit SCLK_595 = P2^1; //移位時鐘脈沖(S)
sbit Sdata_Red = P2^2; //串行數(shù)據(jù)輸入(RED)
sbit G_74138 = P2^4; //顯示允許控制信號端口(EN)
uint col;
uchar code CharTable[];
uchar Word, DispRow;
uchar CharBuf[40];
/**********************************************************
將顯示數(shù)據(jù)送入74HC595內(nèi)部移位寄存器
**********************************************************/
void WR_595(uchar buf)
{
uchar x;
for (x=0; x<8; x++)
{
Sdata_Red=buf&0x80;
buf = buf << 1; //數(shù)據(jù)左移一位
SCLK_595 = 1; //上升沿發(fā)生移位
_nop_();
SCLK_595 = 0;
}
}
/** Combine two byte to one byte to form shifting byte **/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp;
temp=(h1<<col)|(h2>>(8-col)); //left shift
return (temp);
}
/***************發(fā)送一線點陣數(shù)據(jù)*******************/
void sendoneline()
{
uchar s,buf;
for(s=0; s<16; s++) //need to be 16 for 1/4 scan time
{
G_74138 = 1; //打開顯示
buf=two_onebyte(CharBuf[s],CharBuf[s+4]);
WR_595(buf); //load 8 bit into shift register LS595
}
P1 = P1&0xf0;
RCK_595 = 1; //鎖存數(shù)據(jù)
_nop_();
RCK_595 = 0;
G_74138 = 0; //打開顯示
}
/**************裝載一線點陣數(shù)據(jù)****************/
void loadoneline()
{
uchar s; //panel max display char plus 1, for 16x32 numeric display, s=4+1
for(s=0;s<5;s++)
{
CharBuf[4*s+0] = CharTable[Word+(16*s+3*4)+DispRow];
CharBuf[4*s+1] = CharTable[Word+(16*s+2*4)+DispRow];
CharBuf[4*s+2] = CharTable[Word+(16*s+1*4)+DispRow];
CharBuf[4*s+3] = CharTable[Word+(16*s+0*4)+DispRow];
}
}
/**********************************************************
主函數(shù)
**********************************************************/
void main()
{
uchar i,SPEED;
G_74138 = 0;
col=0;
Word=0;
SPEED=20;
P1=0;
while(1)
{
while(col<8) //Already load max display char + 1, this routine is to shift one char
//Total display will be max display char + 1, for 16x32, display char=5
//After display total shifting char, it will point to next char
{
for(i=0;i<SPEED;i++)//漢字在屏幕上的停留時間(即移動速度快慢)
{
for (DispRow=0;DispRow<4;DispRow++) //掃描4行
{
loadoneline(); //裝載一線點陣數(shù)據(jù)
sendoneline(); //發(fā)送一線點陣數(shù)據(jù)
P1=DispRow;
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
P10 Moving LED.rar
(1.65 KB, 下載次數(shù): 66)
2017-7-8 23:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
sxdy99
時間:
2017-9-1 15:42
這類資料不好找呢。感謝樓主了
作者:
happyner
時間:
2017-9-8 18:52
thanks,,,,,,
作者:
Akon4
時間:
2018-9-5 13:19
厲害!
作者:
saj123
時間:
2021-1-5 17:24
好資料,能否做成頻譜??
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1