void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P0=shuzu[n];while(!k1);delay();while(!k1);} }

一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-

这个可以用定时器中断来实现,在中断内计数0-9,然后根据计数值刷新显示。在主循环中检测按键。懂事电子设计 Vgz

用51单片机8*8点阵显示出“生日快乐”四个字,这办不到的。至少要用16X16的点阵才能显示出汉字。8*8的点阵只能显示0~9的数字。如果是仿真显示,就用4个8*8的点阵组成一个显示屏,也很简单的。要是实物开发板,那就

假设8个数码管公共端均接地,同时显示1-9\x0d\x0a#include\x0d\x0a#include\x0d\x0a#defineucharunsignedchar\x0d\x0a#defineuintunsignedint\x0d\x0aucharcodeDSY_CODE[]=\x0d\x0a{\x0d\x0a0xc0,0x

void Timer0Init(void){ TMOD=0x01; //设置定时器0为工作方式1 TH0=(65536-45872)/256; //放入初值,11.0592M,50ms TL0=(65536-45872)%256;EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1

P1口为行,P2口为列;numb[10][8];//0~9的点阵数据 由下向上显示,即从 P1.7开始驱动行,然后是P1.6,,,P1.0;for(i=0;i<10;i++){ a=0x80;for(j=7;j>0;j--){ P1=a;P2=numb[i][j];de

51单片机8*8点阵由下向上显示0~9

数码管段选连接到单片机P0口,位选连接到P2口 ORG 0000h MAIN:CALL DISPLAY AJMP MAIN DISPLAY:MOV R0,#0 MOV R1,#0x01 MOV DPTR,#TAB LOOP:INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,#0 ;消隐 MOV P0,A

试验数码管上显示数字( 单片机直接实现位选 共阴极) 。解决方式:连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 。代码:include define uint unsigned int define uchar unsigned char void delay(uint

从电路图来看,是需要数码管共阳极的,哪一位的三极管导通,则该位的数码管就有被点亮的机会。那么七段码数据,低电平的位对应该笔画的LED亮。大致代码:P2=0xff;P0=s_code[1]; //0xF9 P2=0xfe; // P2.0

三个i/o口对应哪个数字就打开哪个数字的开关从而对应的数码管就会亮,其他一定会灭,所以为i/o口的一次赋值,就只开一个数码管。所以要求8个数码管分别显示1~8其实就是很快地轮次开闭8个数码管的开关,不断循环往复,

wei=0; duan=1; P0=x[n]; delay(); duan=0; } } }

两个数码管共用数据线,想要数码管分别显示,就必须采用扫描方式,即是采用两个控制信号轮流输出,去控制数码管的共阳极(或者是阴极)的开启和关闭。时序是:先输出显示数据,然后输出一个控制信号以开启一个数码管,延时,然

1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2

大学单片机怎么在8×8点阵数码管上显示数字1

1. 程序设计内容 8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,

你好:在void set(void)里少了P2的设置.在下面的循环中,n=0和n=7时,显示相同,所以 点阵第一行总是不对,可能同第8行相同.可在n=7后加延时,以错开循环到n=0时,P2,P1的值.for(n = 0; n < 8; n++){ P2=

include include define uchar unsigned char sbit B0=P1^0;sbit B1=P1^1;sbit B2=P1^2;sbit B3=P1^3;uchar table[31]={0,10,20};uchar count;uchar way;uchar T;int tt;uchar flag,fl

移动速度调整y循环的次数。动态扫描一般是用定时中断来做的,你这个程序简单这样凑合着用也行。

1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-

单片机 8*8点阵C51程序

显示器图像向左偏移的解决方法一:分辩率一定要设置为显示的标准值;按显示器的的“auto”按钮自动调整;在显示器的菜单中,调节横向和垂直位置,直到铺满窗口为止。显示器图像向左偏移的解决方法二:在电脑桌面右键点击屏幕分辨率

LED点阵左移是指在LED点阵显示屏上,将所有的LED灯从左到右依次向左移动一位,并将最左边的一位移动到最右边。这种移动可以通过控制点阵中每一位的亮灭状态来实现。在硬件实现上,可以使用ShiftRegister来控制每一位的状态

每屏显示时,列控制码左(右)移,就可实现点阵屏左(右)移动。以显示“ | ” 从右向左移为例,第1 屏,右边第1 列亮1ms后灭,第2 屏,第2 列亮。。。8 屏显示后,完成“| ”左移。

如果点阵显示的是图形,是可以把点阵逆时针转90度,图形就从左向右显示了。但是,看你程序是显示字母,旋转的方法就不行了,那样,字母是横着显示了,这不符合习惯和题目要求。修改方法是,所显示的那些字母要重新取模了,

但是简单一点来说led点阵需要两排8位,一个负责行,一个负责列,比如0是选中的意思,那么行是01111111,列是1011111,那么第一行的第二列灯亮。原理说完,那么左移的话那就简单了,简单而言,行不变,列左移一位,比如

你用取模软件先点个心形,然后用字节左右移来实现就可以了我有16*16点阵的各种动态效果程序给你看下总共有12种动态效果,你改成8*8就可以了/***呈现各种显示效果的函数集***/void flash_bai(uchar *flash_word,uchar flash_heard,

//定义一个无符号字符型局部变量 i 取值范围 0~255 Delay(50000); P1=0xfe;      //赋初始值 for(i=0;i8;i++)  //加入 for循环,表明for循环大括号中的程序循环执行8次

单片机led点阵显示屏8*8左移怎么调

一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-

//显示0 w=0x01; //行变量为第一行 for(i=0;i<8;i++){ P1=w;//行数据送P1口 P0=led0[i];delayms(1);//列数据送P0口 w<<=1;//向下移动一行 } } } void delay1ms(unsigned int ms){ unsigned

0x22,0x1C},//3 {0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x08},//4 {0x3E,0x20,0x20,0x3E,0x02,0x02,0x22,0x1C},//5 {0x1C,0x22,0x20,

1. 程序设计内容 8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,

说明你的程序根本就不能控制8x8点阵LED,都不能点亮。再说了,显示一个汉字,至少要16x16的点阵,开发板上的8x8点阵只能显示一些图形,根本就不能显示汉字的。

static unsigned int tmr = 0; //1s软件定时器 static unsigned char index = 9; //图片刷新索引 TH0 = 0xFC; //重新加载初值 TL0 = 0x67;//以下代码完成LED点阵动态扫描刷新 P0 = 0xFF; //显示消隐

单片机汉字8x8点阵LED动态显示程序

这个程序验证过,你可以参考试试://-------------------------------------------//8*8矩阵循环显示字符和数字//显示字符串在数组disstr[]中申明//-------------------------------------------#include#include#define uchar unsigned char#define uint unsigned int//--------------------------------------------uchar code Table_of_Digits[40][8]={ {0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C},//0 {0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C},//1 {0x1C,0x22,0x02,0x02,0x1C,0x20,0x20,0x3E},//2 {0x1C,0x22,0x02,0x1C,0x02,0x02,0x22,0x1C},//3 {0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x08},//4 {0x3E,0x20,0x20,0x3E,0x02,0x02,0x22,0x1C},//5 {0x1C,0x22,0x20,0x3C,0x22,0x22,0x22,0x1C},//6 {0x3E,0x02,0x04,0x08,0x10,0x10,0x10,0x10},//7 {0x1C,0x22,0x22,0x1C,0x22,0x22,0x22,0x1C},//8 {0x1C,0x22,0x22,0x22,0x1E,0x02,0x22,0x1C},//9 {0x00,0x1C,0x22,0x22,0x22,0x3E,0x22,0x22},//A {0x00,0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C},//B {0x00,0x1C,0x22,0x20,0x20,0x20,0x22,0x1C},//C {0x00,0x3C,0x22,0x22,0x22,0x22,0x22,0x3C},//D {0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x3E},//E {0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x20},//F {0x00,0x1C,0x22,0x20,0x3E,0x22,0x22,0x1C},//G {0x00,0x22,0x22,0x22,0x3E,0x22,0x22,0x22},//H {0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C},//I {0x00,0x3E,0x08,0x08,0x08,0x08,0x28,0x18},//J {0x00,0x20,0x2C,0x30,0x20,0x30,0x2C,0x20},//K {0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x3E},//L {0x00,0x42,0x66,0x5A,0x42,0x42,0x42,0x42},//M {0x00,0x00,0x2C,0x32,0x22,0x22,0x22,0x22},//n {0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x1C},//O {0x00,0x3C,0x22,0x22,0x3C,0x20,0x20,0x20},//P {0x00,0x1C,0x22,0x22,0x22,0x2A,0x26,0x1F},//Q {0x00,0x38,0x24,0x24,0x38,0x30,0x28,0x24},//R {0x00,0x1C,0x22,0x20,0x1C,0x02,0x22,0x1C},//S {0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08},//T {0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//U {0x00,0x22,0x22,0x22,0x14,0x14,0x08,0x00},//V {0x00,0x41,0x41,0x49,0x55,0x55,0x63,0x41},//W {0x00,0x00,0x42,0x24,0x18,0x18,0x24,0x42},//X {0x00,0x22,0x22,0x14,0x08,0x10,0x20,0x00},//Y {0x00,0x3E,0x02,0x04,0x08,0x10,0x20,0x3E},//Z};//---------------------------------------uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//---------------------------------------uchar i=0;uchar j=0;uchar t=0;uchar Num_Index,disnum;uchar key;uchar xi;uchar yi;//---------------------------------------uchar code disstr[]="C201600102020";//---------------------------------------sbit we1=P1^1;sbit we2=P1^3;//---------------------------------------//主程序//---------------------------------------void main(){//P1=0x80;Num_Index=0; //从0 开始显示TMOD=0x01; //T0 方式0TH0=(65536-2000)/256; //2ms 定时TL0=(65536-2000)%256;IE=0x82;key=0;xi=0;yi=0;EX0=1;IT0=1;TR0=1; //启动T0while(1);}//---------------------------------------//外部中断0 中断函数//按键处理//---------------------------------------void ext_int0() interrupt 0{ key++; key&=0x03;}//---------------------------------------//定时器0 中断函数//显示控制//---------------------------------------void LED_Screen_Display() interrupt 1{TH0=(65536-2000)/256; //2ms 定时TL0=(65536-2000)%256;switch(key){//显示点阵图形case 0: P0=0xff; if(Num_Index==0)disnum=disstr[Num_Index]-'A'+10; else disnum=disstr[Num_Index]-'0'; we1=1; P0=~Table_of_Digits[disnum][i]; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=ydat[i]; we2=0; if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0; if(++Num_Index==13) Num_Index=0; //显示下一个数字 } break;//流水灯“点”模式case 1: we1=1; P0=~xdat[xi]; we1=0; we2=1; P0=ydat[yi]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { t=0; yi++; if(yi>7){yi=0;xi++;} if(xi>7)xi=0; } break;//流水灯“行列”模式case 2: we1=1; P0=0x00; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=xdat[i]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { if(++i==8) i=0; //每屏一个数字由8 个字节构成 t=0; } break;default: key=0; i=0; j=0; t=0; xi=0; yi=0; Num_Index=0; we1=1; P0=0xff; we1=0; we2=1; P1=0x80; we2=0; break;}}
说明你的程序根本就不能控制8x8点阵LED,都不能点亮。 再说了,显示一个汉字,至少要16x16的点阵,开发板上的8x8点阵只能显示一些图形,根本就不能显示汉字的。
avr的静态点阵 #include unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //控制低电平 unsigned char b[]={0xff,0x18,0x18,0xff,0x18,0x18,0x18,0xff}; //控制高电平 void delay(unsigned int cnt) { while(--cnt); } void main(void) { int i=0,n=0; DDRA=0xFF; DDRB=0xFF; while(1) { for (i=0;i<8;i++) { PORTA=a[i]; PORTB=b[i]; delay(300); } } } AVR的动态点阵 #include unsigned char a[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //列高电平控制端 unsigned char b[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //行低电平控制端 0x7e,0x76,0x76,0x00,0x00,0x76,0x76,0x7e, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; void delay(unsigned int cnt) { while(--cnt); } void main(void) { int i=0,n=0,k=0; DDRA=0xFF; DDRB=0xFF; while(1) { for(k=0;k<16;k++) { for(n=0;n<50;n++) { for (i=0;i<8;i++) //i循环8次进去下个语句 { PORTA=a[i]; PORTB=b[i+k]; delay(50); } } }
8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。 不知道你要实现什么样的显示,不过基本方法是一样的。我这有一个现成的8*8的程序,你可以根据这个去修改: 在8X8点阵LED上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。(要实现一根柱形的亮法:一根竖柱,对应的列置1,而行则采用扫描的方法来实现。 一根横柱,对应的行置0,而列则采用扫描的方法来实现。) 汇编源程序: ORG 00H START: NOP MOV R3,#3 LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,AINC R2 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,#7 LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,A DEC R2 LCALL DELAY DJNZ R4,LOP3 DJNZ R3,LOP4 MOV R3,#3 LOP6: MOV R4,#8 MOV R2,#0 LOP5: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A+DPTR MOV P1,A INC R2 LCALL DELAY DJNZ R4,LOP5 DJNZ R3,LOP6 MOV R3,#3 LOP8: MOV R4,#8 MOV R2,#7 LOP7: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A+DPTR MOV P1,A DEC R2 LCALL DELAY DJNZ R4,LOP7 DJNZ R3,LOP8 LJMP START DELAY: MOV R5,#10 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H END C51语言源程序 #include unsigned CHAR code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned CHAR code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void DELAY(void) { unsigned CHAR i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void DELAY1(void) { unsigned CHAR i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { unsigned CHAR i,j; while(1) { for(j=0;j<3;j++) //FROM left to right 3 time { for(i=0;i<8;i++){ P3=taba[i]; P1=0xff; DELAY1();} } for(j=0;j<3;j++) //FROM right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}} for(j=0;j<3;j++) //FROM top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}} for(j=0;j<3;j++) //FROM bottom to top 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; DELAY1();}} } }
#include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; code uint8 graph[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF, 0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7, 0xFF,0x99,0x99,0x99,0x99,0x81,0xC3,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }; sbit ENLED = P1^4; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; uint8 i= 0,counter = 0; void timer1_init() { TMOD |= 0x10; TMOD &= 0xdf; TH1 = 0xFC; TL1 = 0x67; TR1 = 1; } void int_init() { ET1 = 1; EA = 1; } void refresh_led() { static uint8 j = 0; switch(j) { case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;break; case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;break; case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;break; case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;break; case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;break; case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;break; case 6: ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;break; case 7: ADDR0 = 1;ADDR1 = 1;ADDR2 = 1;break; default: break; } P0 = graph[i + j]; if(7 == j++) j = 0; } main() { ENLED = 0; ADDR3 = 0; timer1_init(); int_init(); while(1); } void interrupt_timer1() interrupt 3 { TH1 = 0xFC; TL1 = 0x67; counter++; if(counter == 200) { counter = 0; i++; if(i>=32){i=0;} } refresh_led(); }这程序显示字母I FC U 8*8太小了 改下就可以了
#includesbit wei=P1^1; //位控制端sbit duan=P1^0; //段控制端 unsigned int i,n;unsigned int w[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};unsigned int x[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};void delay(){ for(i=400;i>0;i--);} void main(){ while(1) { for(n=0;n<8;n++) { wei=1; P0=w[n]; wei=0; duan=1; P0=x[n]; delay(); duan=0; } } }
是要仿真吗?还是实物开发板? 写C程序?还是汇编程序?
源代码稍修改,然后把这个加进去就行了。。。 int sec_cnt = 0; unsigned char timer0_cnt = 0; unsigned char sec1 = 0; void DelaySec(unsigned char sec) { sec_cnt = 0; while(sec_cnt < sec); } void Timer0Init(void) { TMOD=0x01; //设置定时器0为工作方式1 TH0=(65536-45872)/256; //放入初值,11.0592M,50ms TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 } void timer0() interrupt 1 //50ms定时器中断 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; timer0_cnt++; if(timer0_cnt == 20) //1s一次 20 { timer0_cnt = 0; sec1++; if(sec1==1) { DelaySec(1); } if(sec1==2) { DelaySec(2); } if(sec1==3) { DelaySec(3); } if(sec1==4) { DelaySec(4); } if(sec1==5) { DelaySec(5); } if(sec1==6) { DelaySec(6); } if(sec1==7) { DelaySec(7); } if(sec1==8) { DelaySec(8); } if(sec1==9) { sec1=0; DelaySec(9); } if(sec1==0) { DelaySec(10); } } }