Ⅰ 16*16點陣程序,行用單片機的P1和P0埠,列用兩個74hc595串聯。程序寫到這兒不會了,求大俠來補充一下
調試成功,幫你簡化了下程序,加了點注釋
#include <reg52.h>
#define uchar unsigned char
sbit sck=P2^0;//11腳,上升沿時數據寄存器的數據移位
sbit rck=P2^1;//12腳,上升沿時移位寄存器的數據進入數據存儲器
sbit outbyte=P2^3;//14腳,串列數據輸入口
uchar code table[]={
0x08,0x20,0x08,0x24,0xFF,0xFE,0x08,0x20,
0x0A,0x20,0x02,0x10,0x3F,0xF8,0x02,0x10,
0x02,0x10,0x22,0x18,0x24,0x16,0x44,0x12,
0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20
};//這里是一個漢字的字模
////////////////////////
void del(uchar i)
{
for(i;i>0;i--);
}
////////////////////////
void hscan(uchar i)
{//假設你用P0^1第一行,P1^0第9行,且你的點陣是按行為0,列為1的方式設計
if(i<8)
P0=~(0x01<<i),P1=0xff;
else
P0=0xff,P1=~(0x01<<(i-8));
}
void send(uchar dat1,uchar dat2)
{
uchar i;
for(i=0;i<8;i++)
{ outbyte=(dat1<<i)&0x80;//可改為outbyte=(dat1>>i)&0x01; //從低位開始串列
sck=0,sck=1; //這里del()延時一般可以不要
}
for(i=0;i<8;i++)
{ outbyte=(dat2<<i)&0x80;//可改為outbyte=(dat1>>i)&0x01;//從低位開始串列
sck=0,sck=1;
}
rck=0;
del(1);
rck=1;
}
/////////////////
void main()
{
uchar i=0;
while(1)
{ for(i=0;i<16;i++)send(0xf0,0xf0),hscan(i),del(10);
}
}
另外P0口要加上拉電阻
行不行,給個反應啊
Ⅱ 基於51單片機的16x16 led點陣顯示屏設計原理與電路圖
ORG0000H
AJMPBEGIN
ORG0030H
BEGIN:
MOVR0,#8
MAIN:
MOVA,R0
MOVR2,#00H
MOVSP,#60H
MOVR3,A
MOVR4,#16
MOVDPTR,#WORDTAB
START:
JNBP1.0,SLOW
JNBP1.1,SOON
MOVR1,#00H
SCAN8:
MOVA,R1
SWAPA
MOVP3,A
SWAPA
INCA
MOVR1,A
MOVA,R2
MOVCA,@A+DPTR
CJNEA,#0DDH,NEXT
AJMPMAIN
NEXT:
MOVP2,A
INCR2
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
INCR2
LCALLDELAY1400
MOVP0,#00H
MOVP2,#00H
DJNZR4,SCAN8
MOVR4,#16
DJNZR3,SCAN16
AJMPEND16
SCAN16:
MOVA,R2
CLRC
SUBBA,#32
MOVR2,A
AJMPSTART
END16:
INCDPTR
INCDPTR
MOVA,R2
CLRC
SUBBA,#32
MOVR2,A
MOVA,R0
MOVR3,A
AJMPSTART
SLOW:
LCALLDELAY20000
DECR0
JBP1.0,$
AJMPBACK
SOON:
LCALLDELAY20000
INCR0
JBP1.1,$
AJMPBACK
BACK:
LCALLDELAY20000
AJMPSTART
DELAY1400:;誤差0us
MOVR6,#7FH
DL0:
MOVR7,#04H
DJNZR7,$
DJNZR6,DL0
RET
DELAY20000:;誤差0us
MOVR6,#0D7H
DL1:
MOVR7,#2DH
DJNZR7,$
DJNZR6,DL1
NOP
NOP
RET
WORDTAB:
DB00H,1FH,80H,20H,40H,40H,20H,40H,10H,40H,08H,40H,04H,20H,02H,10H;
DB02H,10H,04H,20H,08H,40H,10H,40H,20H,40H,40H,40H,80H,20H,00H,1FH;
TAB:;結束碼
DB0DDH
Ⅲ 單片機1616點陣顯示漢字程序
首先要用取模軟體,獲得要顯示的漢字的字模,每行兩個位元組,共32位元組。然後單片機控制每次送一行的數據,並進行顯示,輪流16次,再反復即可。
Ⅳ 單片機實驗(液晶點陣16*16)
不知道是否要加上拉電阻呢?可以試試。確認一下晶元是否是好的。
Ⅳ 用單片機實現16*16點陣顯示,要用C語言編寫程序+注釋,順便還要原理圖,能幫幫忙么
問題:
1.字元串沒加結束標志'\0'
2. else if(ns>=n&&nt<n)
for(i=0;i<n;i++)
{m1[i]=s[i];
strcat(m1,t);
strcpy(s,m1);
}
這段錯誤
#include"iostream.h"
#include"string.h"
#include"stdio.h"
void mystrcat(char s[],char t[],int n)
{
char m1[100],m2[100];
int i,ns,nt;
ns=strlen(s);
nt=strlen(t);
if(ns>=n&&nt>=n)
{
for(i=0;i<n;i++)
{
m1[i]=s[i];
m2[i]=t[i];
}
m1[i]='\0';
m2[i]='\0';
strcat(m1,m2);
strcpy(s,m1);
}
else if(ns<n&&nt>=n)
{
for(i=0;i<n;i++)
m2[i]=t[i];
m2[i]='\0';
strcat(s,m2);
}
else if(ns>=n&&nt<n)
{for(i=0;i<n;i++)
{m1[i]=s[i];
}
m1[i]='\0';
strcat(m1,t);
strcpy(s,m1);
}
else
strcat(s,t);
}
void main()
{
char s[100],t[100];
gets(s);
gets(t);
int n;
cin>>n;
mystrcat(s,t,n);
puts(s);
}
我可以幫助你,你先設置我最佳答案後,我網路Hii教你。