一.基于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动态显示程序

//移位时钟脉冲 ---接板卡上的SPOsbit RCK_595 =P1^7; //输出锁存器控制脉冲 ---接板卡上SPKsbit CS_LED8 =P1^1; //数码管片选 ---接板卡上的CSsbit CS_1302 =P1^4; //ds1302片

8*8点阵是动态扫描的 静态显示也是动态扫描的结果。比如说下面这个程序:include include "74HC595.H"unsigned char code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code b[]

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程序

sbit clock_rst=P2^5;sbit wei1=P2^0;sbit wei2=P2^1;sbit wei3=P2^2;sbit wei4=P2^3;sbit wei5=P2^4;sbit wei6=P3^3;sbit a0 = ACC ^ 0;//为了编程方便定义的位变量 sbit a1 = ACC ^ 1;sbit a2

静态方式:输入123456 字码段 然后使能“显示”动态扫描方式:输入“1”字码段,打开LED1,关闭LED23456 然后持续0.05秒,输入“2”字码段,打开LED2,关闭LED13456 然后持续0.05秒,输入“3”字码段,打开LED3,关闭

include define INT8U unsigned char define INT16U unsigned int //共阴极数码管段码 INT8U SEG_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F, //0~9 };void delay_ms(INT16

includemain(){P1=0x6d;while(1);}

sbit button4=P1^3;sbit button5=P1^4;

voidmain(void){ while(1){ P2=0x7f;//P2.0引脚输出低电平,数码显示器接通电源准备点亮 P0=0x92; //让P0口输出数字"5"的段码92H } }

单片机一直显示5怎么编程

要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。

设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只

这个程序可以循环显示0~9.#include#include#define uchar unsigned char#define uint unsigned intuchar code Table_of_Digits[]={0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //00x00,0x00

{0xC3, 0x81, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3}, //数字0 {0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3}, //数字1 {0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81},

在一块8x8的LED点阵上循环显示0~9十个数字字符,时间间隔为1s。

(2). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;4. 程序设计内容 (1). 数字0-9点阵显示代码的形成 如下图所示,假设显示数字“0”1 2 3 4 5  6

1、定义数码管和点阵屏的接口。2、定义按键和数码管、点阵屏驱动的接口。3、编写按键按下的处理函数。4、编写数码管和点阵屏驱动的函数。5、在主程序中调用按键按下的处理函数和数码管、点阵屏驱动的函数。

液晶显示屏是不停闪烁的,而且一次只能显示一个图案。显示屏上显示12345也是每次在一个位置上显示一个数字,不停的显示五次,由于计算速度快,及人眼暂留现象,使人感觉上显示的是12345。现在,你如果需要动画效果,需要从底

sbit button4=P1^3;sbit button5=P1^4;

单片机点阵显示数字5

  8x8的点阵太小,很难正常显示一个汉字,通常,会使用4个8x8的点阵即16x16的点阵来显示一个汉字。   单片机在通过点阵显示汉字的时候,需要用到如下技术手段:   1、汉字取模   汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。   例如下图,的汉字“中”   该字的16x16点阵图形中,每行有16个像素,可以编码为2个字节,每8个像素,对应一个字节的高低位,则该字编码的前2个字节为0x01,0x80……,如此,可用32个字节描述汉字的点阵图形。   关于汉字取模有很多开源的软件,你可以搜索下载并使用,将你的程序中所需要使用的汉字,全部处理成字模,再定义到程序中即可。(也可以使用汉字字库芯片,这里就不讨论了)   2、扫描显示   通常,驱动点阵设备时,为了节约单片机的管脚资源,会使用锁存器一类的期间,即锁存器输出端与点阵连接,而输入段由单片机控制,采用行、场扫描或分块行、场扫描的方式驱动,具体你可以搜寻相关资料。
c语言的 8x8点阵的 你需要建个自模的啊 怎么给你呢
跟数码管没什么区别啊。。无非就是个动态扫描,自己想想几分钟就写出来了。。
你键盘不好了吧,不能及时放开,导致多次判键,其他数字都没问题就5有问题只能说明这个问题。
#include #define INT8U unsigned char #define INT16U unsigned int //共阴极数码管段码 INT8U SEG_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F, //0~9 }; void delay_ms(INT16U x) { INT8U t;while(x--) for(t=0;t<120;t++); } void main() { INT8U i; while(1) { for(i=0;i<9;i++) { P0=SEG_CODE[i]; delay_ms(550); } } } 这是0~9的程序,给个采纳咯,注意是共阴极的数码管
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 sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; unsigned char code image[11][8] = { {0xC3, 0x81, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3}, //数字0 {0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3}, //数字1 {0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81}, //数字2 {0xC3, 0x81, 0x9D, 0xC7, 0xC7, 0x9D, 0x81, 0xC3}, //数字3 {0xCF, 0xC7, 0xC3, 0xC9, 0xC9, 0x81, 0xCF, 0xCF}, //数字4 {0x81, 0xC1, 0xF9, 0xC3, 0x87, 0x9D, 0x81, 0xC3}, //数字5 {0xC3, 0x81, 0xF9, 0xC1, 0x81, 0x99, 0x81, 0xC3}, //数字6 {0x81, 0x81, 0x9F, 0xCF, 0xCF, 0xE7, 0xE7, 0xE7}, //数字7 {0xC3, 0x81, 0x99, 0xC3, 0xC3, 0x99, 0x81, 0xC3}, //数字8 {0xC3, 0x81, 0x99, 0x81, 0x83, 0x9F, 0x83, 0xC1}, //数字9 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //全亮 }; void main() { EA = 1; //使能总中断 ENLED = 0; //使能U4,选择LED点阵 ADDR3 = 0; TMOD = 0x01; //设置T0为模式1 TH0 = 0xFC; //为T0赋初值0xFC67,定时1ms TL0 = 0x67; ET0 = 1; //使能T0中断 TR0 = 1; //启动T0 while (1); } /* 定时器0中断服务函数 */ void InterruptTimer0() interrupt 1 { static unsigned char i = 0; //动态扫描的索引 static unsigned int tmr = 0; //1s软件定时器 static unsigned char index = 9; //图片刷新索引 TH0 = 0xFC; //重新加载初值 TL0 = 0x67; //以下代码完成LED点阵动态扫描刷新 P0 = 0xFF; //显示消隐 switch (i) { case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break; case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break; case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break; case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break; case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break; case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break; default: break; } //以下代码完成每秒改变一帧图像 tmr++; if (tmr >= 1000) //达到1000ms时改变一次图片索引 { tmr = 0; if (index == 0) //图片索引10~0循环 index = 10; else index--; } }
这个程序验证过,你可以参考试试://-------------------------------------------//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;}}