用一按键切换8*8点阵图形显示三幅图, 要有代码和仿真图,求大佬帮忙, 是单片机,用AT89C51

作者&投稿:谯璧 (若有异议请与网页底部的电邮联系)
用一按键切换8*8点阵图形显示三幅, 要有代码和仿真图,求大佬帮忙, 是单片机,用AT89C51~

将显示的内容制成三个表:table1[]={。。。。。。。}
table2[]={。。。。。。。}
table3[]={。。。。。。。}
另将显示的列制成1个表:table0[]={0x80,0x40,0x20,0x01,0x08,0x04,0x02,0x01}
申请一个变量flag,计按键状态 ,按下按键 flag加1
然后根据flag的值,查不同的表,进行显示
if(key==0)
{ delayms(20);
if(key==0)flag++;
while(key==0);
}
if(flag==3) flag=0;
if(flag==0)
{ for(i=0;i<8:i++)
{ P0=table1[i] ;P1=table0[i] ;delayms(2);}
}
if(flag==1)
{ for(i=0;i<8:i++)
{ P0=table2[i] ;P1=table0[i] ;delayms(2);}
}
if(flag==2)
{ for(i=0;i<8:i++)
{ P0=table3[i] ;P1=table0[i] ;delayms(2);}
}

提示:
CLK分频+(0-8的加法器)+译码器,实现位选

单片机8*8点阵(0~F十六进制数字,可做成8*8图形)仿真实例。

)

LED EQU P3;;;;;LED灯显示定义

KEY EQU P1;;;;;键盘接口定义

TIME   EQU 30H 

CNTA  EQU 31H 

CNTB  EQU 32H 

;--------------------程序入口定义

ORG 0000H

JMP START;;;;;;;;芯片复位后的程序执行处

ORG 000BH

JMP T0LED;;;;;;;;8x8 点阵扫描显示,T0 中断

ORG 0030H

;--------------------初始化处理

START:

MOV TIME, #00H 

MOV CNTA, #00H 

MOV CNTB, #00H 

MOV TMOD, #01H 

MOV TH0, #0F0H 

MOV TL0, #60H 

SETB TR0 

SETB ET0 

SETB EA  

MOV LED,#00H;;;;LED灯初始化全灭

;--------------------扫描循环体

LOOP:

MOV KEY,#0FH;;;;;装入键盘首次的扫描值

MOV A,KEY;;;;;;;;读出键盘值放入累加器A

CJNE A,#0FH,GO1;;;读出的键值是否有变化,有变则跳到有键按下处理程序

JMP LOOP;;;;;;;;;无键按下跳回主循环

GO1:

CALL DL20MS;;;;;;;有键按下延时20毫秒去抖

MOV A,KEY;;;;;;;;将键值给累加器

CJNE A,#0FH,GO2;;;重新判断键盘现状

JMP LOOP;;;;;;;;;是抖动则跳回主循环

GO2:

MOV KEY,#0F0H;;;;确定有键按下之后装入二次的扫描值

MOV B,KEY;;;;;;;;将二次扫描值放入寄存器B中

ORL A,B;;;;;;;;;;A与B相或,得到一个字节的数据在A中

;-----------------------键值对比处理

NE1:

CJNE A,#0EEH,NE2;;;将A中的数据与键值表对比,不同则跳到下一个对比

MOV  A,#0;;;;;;;;;将输出显示数据送到寄存器

JMP  KEYEND;;;;;;;;跳出对比程序

NE2:

CJNE A,#0EDH,NE3;;;1

MOV  A,#1

JMP  KEYEND

NE3:

CJNE A,#0EBH,NE4;;;2

MOV  A,#2

JMP  KEYEND

NE4:

CJNE A,#0E7H,NE5;;;3

MOV  A,#3

JMP  KEYEND

NE5:

CJNE A,#0DEH,NE6;;;4

MOV  A,#4

JMP  KEYEND

NE6:

CJNE A,#0DDH,NE7;;;5

MOV  A,#5

JMP  KEYEND

NE7:

CJNE A,#0DBH,NE8;;;6

MOV  A,#6

JMP  KEYEND

NE8:

CJNE A,#0D7H,NE9;;;7

MOV  A,#7

JMP  KEYEND

NE9:

CJNE A,#0BEH,NE10;;;8

MOV  A,#8

JMP  KEYEND

NE10:

CJNE A,#0BDH,NE11;;;9

MOV  A,#9

JMP KEYEND

NE11:

CJNE A,#0BBH,NE12;;;A

MOV  A,#10

JMP  KEYEND

NE12:

CJNE A,#0B7H,NE13;;;B

MOV  A,#11

JMP  KEYEND

NE13:

CJNE A,#07EH,NE14;;;C

MOV  A,#12

JMP  KEYEND

NE14:

CJNE A,#07DH,NE15;;;D

MOV  A,#13

JMP  KEYEND

NE15:

CJNE A,#07BH,NE16;;;E

MOV  A,#14

JMP  KEYEND

NE16:

CJNE A,#077H,KEYEND;;;F

MOV  A,#15

KEYEND: MOV CNTB, A

MOV  DPTR, #PDATA

MOVC A, @A+DPTR

MOV  LED,A;;;;;;;;;;;;;;;;;;将输出显示数据送出显示

JMP LOOP;;;;;;;;;;;;;;;;;;;跳回主循环

PDATA:  DB  80H,0F9H, 24H, 30H, 59H, 12H, 02H,0F8H   ; 显示码数据表

DB  00H, 10H, 08H, 03H, 86H, 21H, 06H, 0EH 

;-------------------20毫秒延时,主要用于去抖动。(100,100)

DL20MS:

MOV R6,#100;;;;;;;;;

DL20MS_1:

MOV R7,#100;;;;;;;;;

DJNZ R7,$;;;;;;;;;;;;

DJNZ R6,DL20MS_1;;;;;

RET

T0LED:                              ; 8x8 点阵扫描显示,T0 中断

MOV TH0, #0F0H      ;

MOV TL0, #60H 

MOV DPTR, #TAB      ; X

MOV A, CNTA  

MOVC A, @A+DPTR 

MOV P0, A                ; P3

MOV DPTR, #DIGIT   ; Y

MOV A, CNTB 

MOV B, #8 

MUL AB 

ADD A, CNTA 

MOVC A, @A+DPTR  

MOV P2, A                ; P1

INC CNTA 

MOV A, CNTA 

CJNE A, #8, NEXT 

MOV CNTA, #00H  

NEXT:

RETI 

TAB:  

DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH  

DIGIT: 

DB 00H,00H,3EH,41H,41H,41H,3EH,00H  ;0

DB 00H,00H,00H,00H,21H,7FH,01H,00H  ;1

DB 00H,00H,21H,43H,45H,49H,31H,00H  ;2

DB 00H,00H,42H,49H,49H,59H,66H,00H  ;3

DB 00H,00H,0CH,14H,24H,7FH,04H,00H  ;4

DB 00H,00H,72H,51H,51H,51H,4EH,00H  ;5

DB 00H,00H,3EH,49H,49H,49H,26H,00H  ;6

DB 00H,00H,40H,40H,40H,4FH,70H,00H  ;7

DB 00H,00H,36H,49H,49H,49H,36H,00H  ;8

DB 00H,00H,32H,49H,49H,49H,3EH,00H  ;9

DB 00H,00H,07H,38H,48H,38H,07H,00H  ;A

DB 00H,00H,7FH,49H,49H,49H,36H,00H  ;B

DB 00H,00H,3EH,41H,41H,41H,22H,00H  ;C

DB 00H,00H,7FH,41H,41H,41H,3EH,00H  ;D

DB 00H,00H,7FH,49H,49H,49H,41H,00H  ;E

DB 00H,00H,7FH,48H,48H,48H,40H,00H  ;F

END 



拼一下就行

拼一下就行




用一按键切换8*8点阵图形显示三幅图, 要有代码和仿真图,求大佬帮忙...
CJNE A,#0FH,GO1;;;读出的键值是否有变化,有变则跳到有键按下处理程序 JMP LOOP;;;无键按下跳回主循环 GO1:CALL DL20MS;;;有键按下延时20毫秒去抖 MOV A,KEY;;;将键值给累加器 CJNE A,#0FH,GO2;;;重新判断键盘现状 JMP LOOP;;;是抖动则跳回主循环 GO2:MOV KEY,#0F0H;;;确定有...

设置一个按键,功能是切换任务 任务1,8个发光二极管每隔1s依次点亮...
设置一个按键,功能是切换任务任务1,8个发光二极管每隔1s依次点亮,循环显示,任务二,8个led灯每隔2秒,依次点亮循环显示任务三,8个led每隔1s闪亮3次,求流程图,和原理图,编程... 设置一个按键,功能是切换任务任务1,8个发光二极管每隔1s依次点亮,循环显示,任务二,8个led灯每隔2秒,依次点亮循环显示任务三,8个led每...

求单片机点阵8*8的操作程序,基本的,说明越详细越好!
单片机点阵8*8的操作程序,主要看你的硬件设计,如果仅是两个8位IO口,分别做成横竖的点阵,可以令一个IO口A,令输出,另IO口B一个令输入(上拉正极电阻3.3~10K)。IO口A,分8位循环输出低电平,这样就可以,读IO口B的数据,是否FF,如果是,则无按键,如果不是,说明有按键,可以可以根据IO口...

用4*4键盘输入用8*8LED点阵显示按键所代表的数字(利用89C51),求图求...
做出来了:

8进8出vga矩阵切换器怎么用
8进8出VGA矩阵切换器的使用方法包括以下三种:1. 使用面板按键进行切换。2. 使用矩阵软件进行切换。3. 使用拼接软件进行切换。前端连接VGA信号输入,后端通常连接拼接屏多点,通过拼接软件操作来进行VGA矩阵切换使用。

8灯8按键怎么接线?
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,1秒后T0常开点闭合1秒计时器T1计时,再过1秒T1计时结束常闭点断开T0线圈。使用...

4*4矩阵键盘控制8*8点阵显示程序:程序中有两个while(1)循环,死掉了,怎...
你可以使用break语句来跳出while(1)这个死循环,关键是看你想怎么样跳出,然后再想办法通过判断相关标志位的状态来使用break语句。

ppt如何设置切换按键ppt如何设置切换按键动画
方法\/步骤分步阅读 1 \/8 打开ppt,选择左上【文件】。2 \/8 点击【选项】。3 \/8 选择【自定义功能区】。4 \/8 右边【开发工具】默认没有勾选。5 \/8 勾选后,点击【确定】。6 \/8 ppt上方多了个【开发工具】菜单栏,点击切换。7 \/8 点击切换按钮控件。8 \/8 将控件放在空白处,我们就可以...

51单片机 用1个按键控制8盏灯,进行花样显示
define uchar unsigned char sbit key=P2^1;\/\/这里看你把按键设置在哪个引脚上 void delay(uint z)unit x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void key1(){ if(key==0){ P1=0x00; \/\/灯全亮 } void key2(){ if(key==0){ P1=0xfe;P1=P1<<1; \/\/左移...

在51单片机中用c语言写程序实现用一个按键控制8个灯的亮和灭(按下按 ...
你首先要确定你的电路。选择什么单片机和数码管,8个按键最简单8个IO口控制。一般简单的是用三极管驱动数码管。如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个就可以类推)\\r\\n\\r\\n1、初始值为0:上电复位后,单片机驱动数码管...

苏尼特左旗13761421500: 用一按键切换8*8点阵图形显示三幅, 要有代码和仿真图,求大佬帮忙, 是单片机,用AT89C51 -
吁庾感昌: 将显示的内容制成三个表:table1[]={.......} table2[]={.......} table3[]={.......} 另将显示的列制成1个表:table0[]={0x80,0x40,0x20,0x01,0x08,0x04,0x02,0x01} 申请一个变量flag,计按键状态 ,按下按键 flag加1 然后根...

苏尼特左旗13761421500: 如何用三个按键通过单片机使8x8点阵显示不同图形 -
吁庾感昌: 没必要用三个按键啊,一个按键就行了,按一次切换一次,8*8点阵接单片机两组IO口,按键接一个io口,显示的图形用取模软件取模就行了!

苏尼特左旗13761421500: LED点阵8*8显示 -
吁庾感昌: 8*8很简单了,先用万用表或5V的电源加个限流点阵测试一下那个引脚是正极和负极.正极和负极那个是“列”、那个是“行”.例如:正极是“列”、负极是“行”.用P0口接三极管反向后接正极的八根线,负极的八根线接P1口,如要显示一个“0”字,可用专用的点阵取码软件提取(网上很多,可以自己下载).用P0口扫描列,用P1口显示数据,P1口和P0口要同步输出,例如P0.0输出低电平,扫描第一列,P1口输出列的数据,以此类推.扫描八次即可显示出一个8*8点阵的“0”字.

苏尼特左旗13761421500: 求一个c语言程序,用单片机,8*8点阵屏,和按键做一个电梯仿真系统……要求;按第一个键点阵屏显示1 -
吁庾感昌: 刚敲完,测试过,没有任何问题,放心使用#include #include #define uchar unsigned char#define uint unsigned int sbit K1=P2^4; sbit K2=P2^3; sbit K3=P2^2; sbit K4=P2^1; sbit K5=P2^0; sbit BE=P2^7; uchar code NUM[]= {0x00,0x3e,0x41,0x41,...

苏尼特左旗13761421500: 求8*8点阵显示12345轮流切换的程序,使用单片机直接驱动,P2口接阳级,P3口接阴极,不用中断
吁庾感昌: 这是我之前写的,自己拿去改一下吧/************************************************/// 设计题目 : 基于51单片机的8*8点阵显示// 功能 : 在8*8点阵上分时显示“I O U”三个字样// 说明 :/************************************************/#include <reg51.h> ...

苏尼特左旗13761421500: 怎么呢用单片机控制一个8*8点阵显示出“生日快乐”急用,求会的最好把程序弄出来,关系一生的大事啊 -
吁庾感昌: 横向平移显示出来呢 还是单字交替显示呢,其实都很简单,首先需要自己将字抽样成一列一列的点阵数据,然后存储在一个数组中,显示的时候采用 扫描输出就行了 即每次点亮一列灯,让后平移一次点亮另一列,中间的延时不要太长3毫秒左右,这样24毫秒就可以显示一屏了,重复上述的一屏法50次,在改变显示的数组内容就ok啦 希望可以帮到你,祝福你们

苏尼特左旗13761421500: 单片机的课程设计——在8*8点阵显示图形 -
吁庾感昌: 这个问题不是很难! 我的理解是楼主可能只用单片机和点阵模块来实现,这需要单片现来做动态扫描. 首先需要你把点阵上要显示图形的代码写出来,即每种图形每行显示的数据,每个图形有8行数据,即占8个字节的空间! 如果楼主用51单片机来实现的话,可以使用P0口输出行数据,P1口作为点阵的行扫描控制. 其次要用按键控制,只需你把每种图形以不同的表存起来,再做一个按键扫描程序,当检测到有键按下时,把动态扫描的表头地址更换即可!

苏尼特左旗13761421500: 8*8点阵显示程序C语言 大神把这个程序指导一下 想不明白进入中断怎么执行 -
吁庾感昌: 程序是错的.TMOD=0x00;---方式0,定时初值最大是8192 TH0=(65536-20000)/256; --65536 !明显是错误 TL0=(65536-20000)%256;

苏尼特左旗13761421500: 用2个8*8的点阵屏做一个显示模块都需要哪些原件? -
吁庾感昌: 首先 8*8点阵两块 如果显示复杂内容 就得单片机控制 : 51单片机或AVR单片机一片(复位电路:电阻4.7K *1电容2.2UF*1 按键*1) 驱动:三极管8050*16 或8550*16 (八个也可以) 建议 用个74LS154 省略就不用 占用IO 程序

苏尼特左旗13761421500: 基于51单片机设计一个点阵屏幕滚动汉字,屏幕内容向左右上下滚动, 急啊 哪位高手帮帮我啊 -
吁庾感昌: 显示汉字的话.要想所有汉字都能显示.估计8*8的点阵你要用四个.这样才能显示的更加完美一点.至于左右上下滚动这都不难.建议你先将一个点阵学好.看你后面的补充感觉又像是用的128*64的中文液晶,不知道你究竟要用什么做.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网