4.1单片机的最小应用系统 11 4.1.1 单片机的时钟电路 12 4.1.2 复位电路和复位状态 12 4.1.3总线结构 14 4.2此设计显示电路 15 第五章程序设计 15 第六章 原理图和印制板图的设计 16 ( 一 ) 原 理 图

② 四六译码器 74LS154,作为 LED行线的译码选择(实际制作中考虑成本问题改为两个74HC138联合); ③ 三极管 9012,连接四六译码器的十六个输出端,作为开关使用,驱动LED的行线。 图二AT89S51单片机最小系统 AT89S51相关器件连接的接脚如下

//P1_0所接二极管亮,下面依次是P1_1到P1_7(电路连接时二极管一端连P1_0,一端连电阻再连5v,低电平的时候亮,因此加取反“~”)if(i==7)P1=~0x02;if(i==6)P1=~0x04;if(i==5)P1=~0x08;if(i==4)

后补充:根据你的“问题补充”,需要增加一个AD转换器,常用的并口有ADC0809,串口有ADC0834,单片机扫描AD转换输出的数据,送到上述的频率f和占比w两个变量。就可以改变。幅度改变很简单,用电位器的分压直接输出就可以了。

要不了这么多驱动两个74HC59和一个74HC154.给你图你看看。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,1 6×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大

//以下程序能实现多个16*16LED屏的多个字符显示,显示方式有整行上移、帘入帘出、左移、右移// #include "reg52.h" #define BLKN 8 //列锁存器数(=LED显示字数*2) #define TOTAL 20 //待显示字个数,本例共20个 #define

急!!!!急!!急!跪求16X16LED点阵移动字幕 用C51单片机制作 带电路图的 我的 QQ 邮箱 373588221@qq.c

用proteus仿真16×16的LED点阵屏,主要考虑点阵屏行,列数控制就行,不必考虑驱动,所以不必用MOS管。可用4块8×8点阵模块拼成。至于行列控制数据锁存可用74HC573比较好写程序。用74HC595也可以,只要能写出程序就行的。如下图

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,1 6×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大

基于51单片机的16×16点阵屏流动显示目录一,制作所需器材二,STC89C52简介三,点阵的简介四,程序五,演示六,总结一.制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;返回二.STC89C52简介STC89C52是S

DJNZ R4,SCAN8 MOV R4,#16 DJNZ R3,SCAN16 AJMP END16 SCAN16:MOV A,R2 CLR C SUBB A,#32 MOV R2,A AJMP START END16:INC DPTR INC DPTR MOV A,R2 CLR C SUBB A,#32 MOV R2,A MOV A,R0 MOV R3,A

基于51单片机的16x16 led点阵显示屏设计原理与电路图

void T3_ISR() interrupt 14 //定时器3中断服务程序 用于检测SMBus是否超时{ SMB0CF &= ~0x80; SMB0CF |= 0x80; TMR3CN &=~0x80; STA = 0; BUSY = 0; pcf8563_scl=1;}怕有些地方你不知道是怎么来的,所有我就把

MOVR4,#96;移动“ ”及“单片机仿真”6个字符,共96列 CM:MOVR5,#5;每屏反复显示5次 MOVR3,#16;列数 C1:MOVR2,#0;取码指针 C16:MOV60H,#00H MOV61H,#00H CALL OUT_595 MOVA,R2 MOVCA,@A+DPTR;取当前

fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字 for(n=0;n〈row;n++)for(j=0

define int8 unsigned char define int16 unsigned int define int32 unsigned long int8 flag;int8 n;int8 code table[][32]={/* 以下是 '海' 的 16点阵宋体 字模,32 byte */ 0x21,0x00,0x11,0x00,0x11,

51单片机驱动1616LED点阵显示动画汉字(汇编程序)http://wenku.baidu.com/view/a1a08f05cc1755270722085a.html 基于51单片机控制的LED点阵显示屏(c 语言)http://wenku.baidu.com/view/aa7092dbd15abe23482f4df6.html 51单片

MOVR4,#96;移动" "及"机电工程系"6个字符,共96列 CM:MOVR5,#5;每屏反复显示5次 MOVR3,#16;列数 C1:MOVR2,#0;取码指针 C16:MOVP0,#00H MOVP2,#00H;关显示 CLRP3.0 MOVA,R2 MOVCA,@A+DPTR;取当前

unsigned char code led[]={0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,0x90,0x00,0x18,0x1D,0xF7,0x13,0x14,0x11,0x54,0x15,0x94,0x19,0x14,0x51,0x14,0x91,0xF6,0x7F,0x04,0x11,0x00,0x01,0x

用keil51单片机C语言编写程序,使液晶显示器显示16*16点阵汉字,请问怎么编写,谢谢!

int8 code table[][32]={/* 以下是 '海' 的 16点阵宋体 字模,32 byte */ 0x21,0x00,0x11,0x00,0x11,0xFE,0x02,0x00,0x97,0xF8,0x52,0x88,0x52,0x48,0x12,0x08,0x2F,0xFE,0x22,0x88,0xE2,0x48

;16*16点阵左移汇编程序 DS_595 EQU P1.5 ;串行数据输入(595-14)CH_595 EQU P1.7 ;移位时钟脉冲(595-11)CT_595 EQU P1.6 ;输出锁存器控制脉冲(595-12)G_595 EQU P1.4 ORG 0000H LJMP M

include unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制列,P2控制,低电平显示unsigned char code digittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,

if(i==16)i=0;if(time_50ms==20){ time_50ms=0;j++;if(j==2)j=0;} } } int_T0() interrupt 1 { TH0=0X3C;TL0=0XB0;time_50ms++;} delay(){ unsigned char t1;for(t1=0;t1<100;t1++);}

MOVCA,@A+DPTR;取当前列的显示字码的第二个字节 MOVP2,A;送9~15行控制口 INCR2 MOVP1,R1;送列控制码 INCR1 ACALLD1MS;显示2MS ACALLD1MS DJNZR3,C16;一屏16列是否显示完 MOVR3,#16 DJNZR5,C1;未显示5次,

tmp=~date[x-1][i*2+ia]; //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成, //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据 } if(dis==0)

include char code YD[]= {//一[16*16]上下列排 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,

求51单片机控制的16*16点阵代码

肯定是取点阵时扫描方向搞反了,改正方法:调整取模方向,如原来是"逆向",改为"顺向",或反之,重新生成字模,而不是简单地将上面的字模数据顺序调整

if(i==16)i=0;if(time_50ms==20){ time_50ms=0;j++;if(j==2)j=0;} } } int_T0() interrupt 1 { TH0=0X3C;TL0=0XB0;time_50ms++;} delay(){ unsigned char t1;for(t1=0;t1<100;t1++);}

1、汉字取模 汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。例如下图,的汉字“中”该字的16x16点阵图形中,每行有16个像素,可以编码为2个字节,每8个像素,对应一个字节的高

B,C,D;PB0-PB3连接74HC595的输入口 SI,SCK,RCK;PD6-PD7作串口通信使用连接RxD,TxD 两个三八译码器74LS138组成的16个输出端连接 16 个 9012的三极管的基极 B,发射极E 连接5V电源,集电极C连接到三个汉字点阵的16 个行线控制端。

单片机P1口低4位输出的行号经4/16线译码器4515译码后生成1 6条行选通信号线,再经过驱动器驱动对应的行线。一条行线上要带动16列的LED进行显示,按每一LED器件20 mA电流计算,16个LED同时发光时,需要320 mA电流,选用三极管8550作为驱

51单片机用汇编语言驱动16*16点阵显示“机电工程系”汉字

很简单/*16*16点阵屏的显示*/ #include #include #define DATAOUT P2 //指定P2口做为输出 sbit DATA=DATAOUT^0; //列数据输出位 sbit SCLH=DATAOUT^1; //列扫描时钟位 sbit SCLT=DATAOUT^2; //列数据锁存位 sbit AB=DATAOUT^4; //行数据输出位 sbit SCK=DATAOUT^5; //行扫描时钟位 unsigned char lhj[32];//32字节RAM做为16*16点阵屏显示缓存 void display();//做为点阵扫描函数,将显示缓存的数据输出到点阵屏 void displayS(unsigned int timer);//指定时间扫描显示 void displaymove(unsigned char *lp,unsigned char c,unsigned char timer);//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数, //timer是移动的速度 void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer); //上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 void delay(unsigned int a);//延时子函数 code unsigned char lin[32]={0x04,0x20,0x04,0x20,0xff,0xfe,0x04,0x20,//汉字"英"的点阵数据。汉字点阵数据,可用汉字库点阵生成软件获得 0x01,0x00,0x1f,0xf0,0x11,0x10,0x11,0x10, 0x11,0x10,0xff,0xfe,0x01,0x00,0x02,0x80, 0x04,0x40,0x08,0x30,0x10,0x1c,0x20,0x08}; code unsigned char yang[32]={//达 0x00,0x00,0x40,0x80,0x30,0x80,0x10,0x80, 0x0f,0xfc,0x00,0x80,0x00,0x80,0xe0,0x80, 0x21,0x40,0x21,0x20,0x22,0x18,0x24,0x0c, 0x28,0x08,0x50,0x02,0x8f,0xfc,0x00,0x00}; code unsigned char dian[32]={//通 0x40,0x00,0x27,0xf8,0x20,0x90,0x00,0x60, 0x07,0xf8,0x04,0x48,0xe7,0xf8,0x24,0x48, 0x24,0x48,0x27,0xf8,0x24,0x48,0x24,0x68, 0x24,0x50,0x50,0x00,0x8f,0xfe,0x00,0x00}; code unsigned char zi[32]={//讯 0x40,0x00,0x27,0xf8,0x31,0x08,0x21,0x08, 0x01,0x08,0xf1,0x08,0x17,0xe8,0x11,0x08, 0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x0a, 0x15,0x0a,0x19,0x0a,0x11,0x04,0x00,0x00}; code unsigned char LY[32]={//图案数据 0x00,0x00,0x30,0x00,0x30,0x20,0x30,0x30, 0x30,0x18,0x30,0x0C,0x30,0x06,0x3F,0x7F, 0x3F,0x7F,0x00,0x06,0x00,0x0C,0x00,0x18, 0x00,0x30,0x00,0x20,0x00,0x00,0x00,0x00}; void main(void) //主入口函数 { unsigned char i=0,j=0; for(i=0;i<32;i++) lhj[i]=LY[i];//将图案数据复制到显示缓存 while(1){ displayS(2); //显示图案约2秒 displaymove(lin,4,7);//将从"英"开始的四个汉字从右向左移动 displayS(1); //等持约1秒 displaymovetb(1,0,10); //将点阵上显示的内容向下以10的速度移出,补上0,即清空显示屏 displayS(1); //等待1秒 displaymovetb(0,lin,10); //达"达"字以10的速度向上移动 displaymovetb(0,yang,10); //将"通"字以10的速度向上移动 displaymovetb(0,dian,10); //将"讯"字以10的速度向上移动 displaymovetb(0,zi,10); //将"子"字以10的速度向上移动 displaymovetb(0,0,10); //以10的速度向上清空 displayS(1); //等待1秒 displaymovetb(1,LY,10); //将"图案"以10的速度向下移动 } } void display()//显示 { unsigned char i,ia,j,tmp; //定义变量 DATAOUT=0XFF; //置位高电平做准备 AB=0; //将行数据位清0,准备移位 for(i=0;i<16;i++){ //循环输出16行数据 SCK=0; //为行移位做准备 SCLT=0; //为列锁存做准备 for(ia=2;ia>0;){ //每行16个点,循环位移两个字节 ia--; //循环两次 tmp=~lhj[i*2+ia]; //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成, //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据 for(j=0;j<8;j++){ //循环两次,每次移一个字节, SCLH=0; //为列移位做准备 DATA=tmp&0x01; //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位 tmp>>=1; //将数据缓冲右移一位,为下次输出做准备 SCLH=1; //将DATA上的数据移入寄存器 } //移入单字节结束 } //移入两个字节结束 DATAOUT|=0X24; //此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像 //SCK=1; //SCK拉高,行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳) //SCLT=1; //SCLT拉高,将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始 AB=1; //行数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位, //移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱 } j=64; while(j--); //每一行的显示,保持了两字节的移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度 SCK=0; // SCK=1; //将最后一行数据移出 } void displayS(unsigned int timer) //指定时间扫描显示 { unsigned char i; while(timer--){ //当timer=1时,大约1秒时间 i=130; while(i--) display(); } } void displaymove(unsigned char *lp,unsigned char c,unsigned char timer)//显示汉字内容的移动效果,LP指向要显示第一个字的首地址,C表示显示字的个数, //timer是移动的速度 { unsigned char i=0,j=0,ia=0; unsigned int tmp=0,timerc=0; unsigned char tmp2[16]; c*=2; //因一个汉字由32字节组成,而移位显示,要分开半个汉字16字节处理,因此将这里乘以2 for(i=0;i<16;i++) tmp2[1]=0; //将缓冲区清0, while(c){ //循环处理 if(lp!=0){ //当lp指向的地址为0时,直接用组缓冲0补上,效果是将当前显示的内容移出 tmp=c%2; //取余,目的是为了判断处理汉字的前半部份还是后半部份 for(i=0;i<16;i++){ tmp2[i]=lp[i*2+tmp]; //取半个汉字点阵数据,16字节 } if(tmp) //当tmp为1时,表时一个字数组处理完成,将地址转到下一个字 lp+=32; } //-------------- tmp=8; //变量再次利用 while(tmp){ //循环8次,是将下一个字的前半部份的字节数据移入显示缓冲 ia=0; //做为点阵数组的元素 for(i=0;i<16;i++){//移动是16行同时移,因此要处理16个字节 lhj[ia]<<=1; //移当前显示缓冲的前半行字节 if(lhj[ia+1]&0x80) //判断后半行字节的高位是否为1,是移入前半行字节低位,否则不处理 lhj[ia]++; ia++; lhj[ia]<<=1; //移当前显示缓冲的后半行字节 if(tmp2[i]&0x80) //判断下一个要显示汉字的前半行字节的高位是否为1,是移入,否则不处理 lhj[ia]++; ia++; tmp2[i]<<=1; //下一个要显示汉字的半行字节向高位移一位,准备下一次取位 } tmp--; timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } //---------- c--; //移完一半,进入下一半或下一个汉字,直到结束 } } void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer) //上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 { unsigned char i=0,j=0,ia=0; unsigned int tmp=0,timerc=0; if(din){ //判断移动方向,向下 ia=32; //要移入第一个汉字的数组元素 i=16; //行索引 while(i--){ //逐行处理 j=30; while(j){ j--; lhj[j+2]=lhj[j]; //将上一行的内容复制到下一行,每两行内容相隔四个字节,复制15行 } if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入 lhj[0]=0; lhj[1]=0; } else{ //否则,取字数组处理 ia--; lhj[1]=lp[ia]; ia--; lhj[0]=lp[ia]; } timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } } else{ //移动方向,向上 ia=0; //向上移动,移入汉字从低位开始 for(i=0;i<16;i++){ //处理16行 for(j=0;j<30;j++) //将下一行的内容复制到上一行,每两行内容相隔四个字节,复制15行 lhj[j]=lhj[j+2]; if(lp==0){ //最后一行的处理,判断移入的内容是否为空,是用0移入 lhj[30]=0; lhj[31]=0; } else{ //否则,取字数组处理 lhj[30]=lp[ia]; lhj[31]=lp[ia+1]; ia+=2; } timerc=timer; //处理完16行,调用显示函数更新点阵 while(timerc--) //循环做为处理的速度,即移动的速度 display(); } } } void delay(unsigned int a) //延时 { while(a--); } 有字模软件修改你想要显示的字,程序要字模改动别告诉我你不懂
#include unsigned int code hang[][32]={/*电 CB5E7 */ 0x01,0x80,0x01,0x80,0x01,0x80,0x3F,0xFC,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C, 0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C,0x01,0x83,0x01,0x83,0x00,0xFF,0x00,0x00, /*气 CC6F8 */ 0x0C,0x00,0x0C,0x00,0x1F,0xFF,0x18,0x00,0x30,0x00,0x6F,0xFC,0x00,0x00,0x1F,0xF8, 0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x0F,0x00,0x0F,0x00,0x07,0x00,0x03, /*自 CD7D4 */ 0x01,0x80,0x01,0xC0,0x03,0x00,0x1F,0xFC,0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C, 0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C,0x18,0x0C,0x18,0x0C,0x1F,0xFC,0x18,0x0C, /*动 CB6AF */ 0x00,0x30,0x00,0x30,0x7F,0x30,0x00,0x30,0x00,0xFE,0xFF,0xB6,0x18,0x36,0x18,0x36, 0x36,0x36,0x33,0x36,0x6F,0xE6,0xFF,0x66,0x60,0xC6,0x01,0x9E,0x03,0x0C,0x00,0x00, /*化 CBBAF */ 0x0C,0xC0,0x0E,0xC0,0x0C,0xCC,0x18,0xCE,0x18,0xDC,0x38,0xF8,0x78,0xF0,0xD8,0xE0, 0x19,0xC0,0x1B,0xC0,0x1E,0xC0,0x18,0xC6,0x18,0xC6,0x18,0xC6,0x18,0x7E,0x00,0x00,} unsigned char lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0XFF}; main() {unsigned int i,j,k,m; while(1) {for(m=0;m<10;m++) for(k=0;k<100;k++) {for (i=0;i<8;i++) {P1=0XFF;P0=0XFF; P3=hang[m][i*2];P2=hang[m][i*2+1]; P1=lie[i];P0=0XFF; for(j=0;j<500;j++);} for (i=0;i<8;i++) {P1=0XFF;P0=0XFF; P3=hang[m][i*2+16];P2=hang[m][i*2+17]; P1=0xff;P0=lie[i]; for(j=0;j<500;j++);} }} } 上面显示“电气自动化”汇编有点难。必须得练。帮我加分 采纳哦
#include unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制列,P2控制,低电平显示unsigned char code digittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 控制行,P0控制,高电平显示,八行十个数字{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9};unsigned int time;unsigned char a,b;sbit duan=P3^6;//数码管段显示sbit wei=P3^7;//数码管位显示/***************************************/ /* 主程序 */ /***************************************/void main(void){ duan=1; P0=0X00; duan=0; //关闭数码管段显示 wei=1; //数码管位显示,,点阵行控制TMOD=0x01;//初装中断值TH0=(65536-3000)/256;TL0=(65536-3000)%256;TR0=1;ET0=1;EA=1;while(1) {;}}/***************************************/ /* 中断子程序 */ /***************************************/ void t0(void) interrupt 1 using 0 //中断{TH0=(65536-3000)/256;TL0=(65536-3000)%256;P2=tab[a]; //共阳点阵,P2控制低电平,P0控制高电平P0=digittab[b][a]; //P0控制锁存器74HC573输出高电平控制行 a++;if(a==8){ a=0;} time++;if(time==233){ time=0; b++;if(b==10){ b=0;}}}
你用的仿真软件是Proteus吗?如果是的话用四个8×8点阵组成16×16就行了。自己试着做做。不懂才发给你吧^_^
要的话,留个邮箱我发给你
#include unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制列,P2控制,低电平显示unsigned char code digittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 控制行,P0控制,高电平显示,八行十个数字{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9};unsigned int time;unsigned char a,b;sbit duan=P3^6;//数码管段显示sbit wei=P3^7;//数码管位显示/***************************************/ /* 主程序 */ /***************************************/void main(void){ duan=1; P0=0X00; duan=0; //关闭数码管段显示 wei=1; //数码管位显示,,点阵行控制TMOD=0x01;//初装中断值TH0=(65536-3000)/256;TL0=(65536-3000)%256;TR0=1;ET0=1;EA=1;while(1) {;}}/***************************************/ /* 中断子程序 */ /***************************************/ void t0(void) interrupt 1 using 0 //中断{TH0=(65536-3000)/256;TL0=(65536-3000)%256;P2=tab[a]; //共阳点阵,P2控制低电平,P0控制高电平P0=digittab[b][a]; //P0控制锁存器74HC573输出高电平控制行 a++;if(a==8){ a=0;} time++;if(time==233){ time=0; b++;if(b==10){ b=0;}}}
最简单的就是将32个IO全用上,然后按照连接顺序编写显示程序就可以了,加群131843360交流吧
请提供LED型号
你去电磁炉下载小宋老师的单片机视频教程。里面有!要的话找我也可以QQ862191999
可以买74hc573或者74hc138