一、应用8段LED显示块依次显示0,1,2,3,4,5,6每次显示停留3秒,然后显示1,2,3,4,5,6,7即每次每位数字向左移一位,数字在0~9间循环显示。显示块的链接:将74LS273的输出端Q0—Q7分别接L 一、应用8段LED显示块依次显示
if(t>500){t=0;led=~led;}//LED闪烁 if(n>1000){n=0;s++;}//如果达到一秒,秒加一 if(s>59){s=0;m++;}//如果达到一分,分加一 if(m>59){m=0;h++;}//如果达到一小时,小时加一 if(h>23){h=
要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。
这个程序可以循环显示0~9.#include
{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。
} delay(1000); //延时1秒 } } 该程序利用数组存储数字09的LED点阵图形,并通过循环依次点亮每个数字的7个LED,从而实现数字09的循环显示。可以根据需要对延时时间进行调整,以达到合适的显示效果。
1) 8*8的点阵屏要显示0-9,字母以及汉字需要使用点整显示的方法。对于0-9以及字母都没有问题,点阵用的的很少,在程序里直接写就可以啦。对于汉字你需要找8*8的汉字点阵字库,能不能找到都是个问题,除非只是显示几个
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-
第一步,先将Proteus运行起来,同样新建一个Arduino 328的项目,自己为项目取个名字,此处取名为LEDMatrix。第二步,要从元件库当中找到LED点阵,并添加到工作区。点击左侧“Component Mode”按钮——点击“P”按钮——在输入
static unsigned int tmr = 0; //1s软件定时器 static unsigned char index = 9; //图片刷新索引 TH0 = 0xFC; //重新加载初值 TL0 = 0x67;//以下代码完成LED点阵动态扫描刷新 P0 = 0xFF; //显示消隐
这个程序可以循环显示0~9.#include
怎么利用8×8led点阵屏循环显示数字0-9编写程序并用Proteus仿真验证?
然后 两个FOR循环 大循环0~7自增 内嵌一个 段码【0~7自增】 :这是8*8 单个的点阵了 你所说的 是要16*16才有能力显示汉字的吧 是这样的 你如果也像上面这样的话一个字就用了整个 48个端口了
这个程序验证过,你可以参考试试://---//8*8矩阵循环显示字符和数字//显示字符串在数组disstr[]中申明//---#include
include
1. ORG 0HSTART:MOV DPTR,#DATA1 ;指向点阵代码首址;CLR CDISP?这个应该是CLR C(清除标志位,因为下面要判断是否移完8位)吧 2. MOV R2,#80H ; 80H 使第7 列(最左一列)阴极为低电平(这个感觉也有问题)
利用单片机,在一个8*8的点阵显示屏上显示一个“大”字,怎样编程啊??帮帮忙啊,我作业,不用太精炼的语
if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0;if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break;case 1:P0=~xdat[xi];P1=0xff;P1
1) 8*8的点阵屏要显示0-9,字母以及汉字需要使用点整显示的方法。对于0-9以及字母都没有问题,点阵用的的很少,在程序里直接写就可以啦。对于汉字你需要找8*8的汉字点阵字库,能不能找到都是个问题,除非只是显示几个
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; //定义LED引脚 int numPins[][7] = { //定义数字0~9的LED点阵图形 {1, 1, 1, 1, 1, 1, 0}, //0 {0, 1, 1, 0, 0, 0,
(2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;4. 程序设计内容 (1). 数字0-9点阵显示代码的形成 如下图所示,假设显示数字“0”1 2 3 4 5 6 7 8
include
要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。
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++;
怎么写8×8led点阵屏显示数字0-9的程序?
//动态扫描,显示一屏 void LED_dis(uchar word[]){ for(uchar l=0;l<8;l++){ LED_ctrl=0xff;LED_code=~word[l];LED_ctrl=~(0x01<
用51单片机8×8点阵显示字母,是要用proteus仿真吧,先画出仿真图,再用取模软件画出字母X Q J,然后按行取模,每一个字母的字模是8个字节。显示时,依次取出每行的字模,按行扫描显示即可。下图是一个仿真图。
if(++t==250) //每个数字刷新显示一段时间 { t=0;yi++;
include
你真厉害,一位数组显示点阵实验,点阵最好是用二位数组,基本思路也就是单片机两个IO口控制点阵的行和列,定义一个二位数组控制点阵每一行要亮拿几个灯,然后下一行亮那几个灯,以此类推,快速刷出没一个亮的灯就能让
8*8点阵是动态扫描的 静态显示也是动态扫描的结果。比如说下面这个程序:include
用51单片机以及8*8点阵显示英文字母或者数字(最好是全部数字和字母都说说哈),静态显示就可以 谢谢啊
从电路图来看,是需要数码管共阳极的,哪一位的三极管导通,则该位的数码管就有被点亮的机会。那么七段码数据,低电平的位对应该笔画的LED亮。大致代码:P2=0xff;P0=s_code[1]; //0xF9 P2=0xfe; // P2.0
wei=1; P0=w[n]; wei=0; duan=1; P0=x[n]; delay(); duan=0; } } }
或者是阴极)的开启和关闭。时序是:先输出显示数据,然后输出一个控制信号以开启一个数码管,延时,然后关闭该数码管,接着输出显示数据,再输出控制信号以开启另外一个数码管,延时,然后关闭该数码管,如此循环;
8个数码管的话一般都是由一个三八译码器控制,而且有三个i/o口作为选择数码管的钥匙,三个i/o口按一定顺序组合成的二进制000~111即是数字为0~7的8个数码管分别对应的三极管(开关),三个i/o口对应哪个数字就打开哪个
1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2
2、不用单片机,用数字电路实现很容易呀。用一片10线-4线编码器,接10个按键,输出为BCD码,再用一片74LS247,七段译码器/驱动器,输出接一个共阳数码管即可,按几号键,数码管就显示几了。下表就是74LS147的真值
大学单片机怎么在8×8点阵数码管上显示数字1
#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; } } }
我来帮你搞定
#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(disstr[Num_Index]>='A')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;}}
要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。
何必一定用汇编
8*8点阵显示图形或数字应该怎样编写字模程序?字模该怎么写,原理是什么?菜鸟跪求大神
1. ORG 0HSTART:MOV DPTR,#DATA1 ;指向点阵代码首址; CLR CDISP?这个应该是CLR C(清除标志位,因为下面要判断是否移完8位)吧 2. MOV R2,#80H ; 80H 使第7 列(最左一列)阴极为低电平(这个感觉也有问题) 3.DISP:MOV A,#0; 赋初值0,为了下面能从点阵代码表中从零开始取代码 MOVC A,@A+DPTR ; 取第一列点阵代码 MOV P2,A ; 将第一列点阵代码的值赋给P2口 MOV P1,R2 ;使一列阴极为低电平? CALL DELAY ; 调用延时 INC DPTR ; 指向下一列点阵代码 MOV A,R2 ; R2的值赋给A RRC A ; 右移一位,为下一列阴极输出低电平作准备 MOV R2,A ;右移一位后再把值存储到R2,为了下一次右移 JNC DISP ; 8 列未完跳回到DISP继续执行 4.AJMP START 跳转到START DELAY: MOV R1,#0 ;//这个有问题,R1不是赋零,不然怎么延时啊 DELY0: DJNZ R1,DELY0 ;延时(直到R1的值变为0) 5.RET 返回(这个子程序执行完了) 6.DATA1: DB 24H,44H,DCH,54H,7FH,54H,54H,44H; 点阵代码表
算法其实很简单,在不同时间片打入字模不同就可以实现 以下是伪代码 /****************************************/ while(1) { for{打入字模} delay(人眼可以识别的时间,不要太小,会出现鬼影) }
上面的引脚代表的是列, 是列高行低能使LED亮。 见下面的仿真图就知道了。
c语言的 8x8点阵的 你需要建个自模的啊 怎么给你呢
跟数码管没什么区别啊。。无非就是个动态扫描,自己想想几分钟就写出来了。。