用一按键切换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:上电复位后,单片机驱动数码管...
吁庾感昌: 将显示的内容制成三个表: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的中文液晶,不知道你究竟要用什么做.