亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
16*32LED點陣的51單片機源碼和原理圖
[打印本頁]
作者:
鯨魚先森2
時間:
2017-6-15 11:19
標題:
16*32LED點陣的51單片機源碼和原理圖
這是原理圖
image.png
(75.6 KB, 下載次數: 78)
下載附件
2017-6-15 18:55 上傳
下載:
16X32點陣源碼51.zip
(56.44 KB, 下載次數: 49)
2017-6-15 11:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機程序源碼:
#include <reg51.h>
#include <intrins.h>
#define DATAOUT P1 //P3 use as data, you can change
#define SPEED 13
void ymove(char dir,unsigned char *ptr,char speed);
//void xmove(char dir,unsigned char *ptr,char n,char speed);
void delay(unsigned int a);
void display();
void displaytime(char time);
void init164();
void kong(char dir, char speed);
void fanzhuan(unsigned char *p);
sbit ADATA= DATAOUT^1;//DS
sbit ASCK= DATAOUT^2;//SCK
sbit LATCH= DATAOUT^3;//LATCH
sbit BDATA= DATAOUT^4;//RDATA
sbit BCLK= DATAOUT^6;//CLK
sbit K1 =P0^0;
sbit K2 =P0^1;
sbit K3 =P0^2;
//OE接低電平
//MR接高電平
//CLR接高電平
unsigned char idata buffer[64];
unsigned char bigbuffer[194];
unsigned char comm_len;
unsigned char BSBUF=0;
unsigned char iii; //全局當前顯示第幾個字
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void UART_Init(void)//串口初始化函數
{
SCON=0X50; //串口方式1,允許接收
TMOD|=0X20; //定時器1 定時方式2 T0 is mode 1\
TH1=0xfd; //Baud:9600 fosc=11.0592MHz
TL1=0xfd;
TR1=1; //啟動定時器
ES = 1; //開串口中斷
EA = 1; //開總中斷
}
void main(void)
{
unsigned char i;
init164();
UART_Init();
for(i=0;i<194;i++)
{
bigbuffer[i]=0x00;
}
//fanzhuan(&bigbuffer[1]);
//for(i=0;i<32;i++)
// buffer[i+32]=buffer[i];
while(1)
{
if(bigbuffer[0]==0x16)
{
for(iii=0;iii<bigbuffer[1];iii++)
{
ymove(1,&bigbuffer[2+iii*32],SPEED);
}
}
else if(bigbuffer[0]==0x15)
for(iii=0;iii<bigbuffer[1];iii++)
{
ymove(0,&bigbuffer[2+iii*32],SPEED);
}
else
display();
}
}
/************* 子函數 ******************/
void delay(unsigned int a) //延時函數
{
while(a--);
}
void fanzhuan(unsigned char *p)
{
unsigned char i,j,k,temp,*w,temp1,temp2,temp3;
w=p;
for(i=0;i<8;i++) //左下角的8*8 翻轉后位于左上角
{
temp=0x00;
for(j=0;j<8;j++)
{
temp1= *(p+30-j*2) ;
temp2=temp1<<i;
temp3=temp2&0x80;
temp3=temp3>>j;
temp=temp|temp3;
}
buffer[i*2]=temp;
}
for(i=0;i<8;i++) //左上角的8*8 反轉后位于右上角
{
temp=0x00;
for(j=0;j<8;j++)
{
temp1= *(p+14-j*2);
temp2=temp1<<i;
temp3=temp2&0x80;
temp3>>=j;
temp|=temp3;
}
buffer[i*2+1]=temp;
}
for(i=0;i<8;i++) //右上角的8*8 反轉后位于右下角
{
temp=0x00;
for(j=0;j<8;j++)
{
temp1= *(p+15-j*2);
temp2=temp1<<i;
temp3=temp2&0x80;
temp3>>=j;
temp|=temp3;
}
buffer[i*2+17]=temp;
}
for(i=0;i<8;i++) //右下角的8*8 反轉后位于左下角
{
temp=0x00;
for(j=0;j<8;j++)
{
temp1= *(p+31-j*2);
temp2=temp1<<i;
temp3=temp2&0x80;
temp3>>=j;
temp|=temp3;
}
buffer[i*2+16]=temp;
}
}
/*顯示*/
void display() //顯示buffer里32*16的數據
{
unsigned char hang,ib,k,tmp;
DATAOUT= 0x0;
BDATA = 1 ;
for(hang=0;hang<16;hang++)
{
ASCK =0;
LATCH=0;
BCLK =0;
for(ib=0;ib<2;ib++)
{
tmp = buffer[hang*2+ib];
for(k=0;k<8;k++)
{
tmp <<=1;
ASCK =0;
ADATA =CY;
ASCK =1;
}
}
for(ib=0;ib<2;ib++)
{
tmp = buffer[hang*2+ib+32];
for(k=0;k<8;k++)
{
tmp <<=1;
ASCK =0;
ADATA =CY;
ASCK =1;
}
}
//DATAOUT|=0x14;
LATCH=1;
BCLK=1;
BDATA=0;
}
delay(64);
ASCK =0;
ASCK =1;
}
void displaytime(char time) //循環刷新顯示
{
unsigned char i;
while(time--)
{
i=130;
while(i--)
display();
}
}
/*74ls164,74ls595的初始化*/
void init164()
{
char i;
BDATA=0;
for(i=0;i<16;i++) //清空164
{
BCLK =0;
BCLK =1;
}
for(i=0;i<32;i++) //清空595
{
ASCK =0;
ADATA =0;
ASCK =1;
}
}
/*左右移動*/
void ymove(char dir,unsigned char *ptr, char speed)
{ //dir=1左移動,dir=0為右移動
char i=0, j=0, ib=0;
unsigned int tmp=0, speedm=0;
if(dir==0)
{
/**** 向右移 ****/
ib=31;
for(i=16;i>0;i--) //下移16行
{
for(j=61;j>-1;j--)
buffer[j+2]=buffer[j]; //將上一行的內容復制到下一行
if(ptr==0)
{ //移空時,buffer的首行用0移入
buffer[0]=0;
buffer[1]=0;
}
else
{ //否則,處理buffer的首行元素
buffer[1]=ptr[ib];
buffer[0]=ptr[ib-1];
ib=ib-2;
}
speedm=speed;
while(speedm--) //更新點陣
display();
}
}
/****** 向左移 *******/
else
{
ib=0; //數組元素序號
for(i=0;i<16;i++) //上移16行
{
for(j=0;j<62;j++) //將下一行的內容復制到上一行
buffer[j]=buffer[j+2];
if(ptr==0) //移入為空,buffer的末行用0移入
{
buffer[62]=0;
buffer[63]=0;
}
else
{ //否則,處理buffer的末行元素
buffer[62]=ptr[ib];
buffer[63]=ptr[ib+1];
ib=ib+2;
}
speedm=speed; //更新點陣
while(speedm--)
display();
}
}
}
void kong(char dir, char speed)
{ //dir=1左移動,dir=0為右移動
char i=0, j=0, ib=0;
unsigned int tmp=0, speedm=0;
if(dir==0)
{
/**** 向左移 ****/
ib=31;
for(i=8;i>0;i--) //下移16行
{
for(j=61;j>-1;j--)
buffer[j+2]=buffer[j]; //將上一行的內容復制到下一行
buffer[0]=0;
buffer[1]=0;
speedm=speed;
while(speedm--) //更新點陣
display();
}
}
/****** 向右移 *******/
else
{
ib=0; //數組元素序號
for(i=0;i<8;i++) //上移16行
{
for(j=0;j<62;j++) //將下一行的內容復制到上一行
buffer[j]=buffer[j+2];
buffer[62]=0;
buffer[63]=0;
ib=ib+2;
speedm=speed; //更新點陣
while(speedm--)
display();
}
}
}
void uart_get_int(void) interrupt 4//串口中斷接收函數
{
unsigned char i,j,k;
RI=0;
if(SBUF==0XEF&&BSBUF==0xFE) //啟始幀
{
comm_len=0;
return;
}
BSBUF=SBUF;
bigbuffer[comm_len]=SBUF;
comm_len++;
if(comm_len==194) //所有數據接受完畢 串口發送數據 字模轉換 主函數里面滾屏
{
comm_len=0;
if(bigbuffer[0]==11)return;
iii=bigbuffer[1]-1;
for(i=0;i<194;i++)
{
SBUF= bigbuffer[i];
while(!TI);
TI=0;
}
for(j=0;j<6;j++)//6個漢字的字模轉換
{
fanzhuan(&bigbuffer[2+j*32]);
for(k=0;k<32;k++)
{
bigbuffer[2+j*32+k]=buffer[k];
}
}
}
}
void saomiao()
{
if(K1==0)
{
Delay10ms();
if(K1==0)
{
}
}
}
復制代碼
作者:
liuminghua2000
時間:
2018-1-16 08:42
很好,謝謝!
作者:
WEIDADETG
時間:
2018-1-16 11:15
如果有仿真的話希望樓主也一起放上來,謝謝
作者:
JKSHGAJ
時間:
2018-12-2 23:16
垃圾,沒有一點用
作者:
蘭州hsd
時間:
2019-3-28 13:46
感謝樓主
作者:
蘭州hsd
時間:
2019-4-16 21:52
樓主,下載下來只有代碼,原理圖呢?
作者:
qq824196365
時間:
2019-4-16 23:06
感謝樓主
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1