stc89c52rc单片机按键控制点阵变换图片,首先保证点阵可以分别显示出几幅图片。其实,显示的每一幅图片都是一组数据,保存为一维数组。那多幅图片,可以按二维数组来保存。假设数组为,pic[5][32],为5幅图片,每幅图片为32

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个字节的空间!如果楼主用51单片机来实现的话,可以使用P0口输出行数据,P1口作为点阵的行扫描控制。其次要用按键控制,只

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){

CJNE A,#0EEH,NE2;;;将A中的数据与键值表对比,不同则跳到下一个对比 MOV A,#0;;;将输出显示数据送到寄存器 JMP KEYEND;;;跳出对比程序 NE2:CJNE A,#0EDH,NE3;;;1 MOV A,#1 JMP KEYEND NE3:CJN

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

12、字符液晶1602LCD接口 采用接插件方式方便插拔(可显示两行 每行16个 共计32任意 ASCII码字符 它的功能应用比数码管丰富很多 显示的信息量更大 我们已经随板附赠了1602LCD 方便学习者开发1602LCD显示的程序) 13、图形点阵液晶12864接

实际上1602显示汉字不怎么好写,因为显示一个汉字要16X16的点阵才可以,而1602是8X8的点阵(显示屏幕由16X2个8X8的点阵构成),按你的要求显示你的名字就得要8个8X8的点阵才能显示,而1602里面刚好显示8个自定义字符,所以

用1602液晶屏显示 姓名学号 用的芯片是AT89S52 我的名字是张晶 学号是080030138 求c语言程序 万分感谢

在8X8 LED 点阵上显示柱形,让其先从左到右平滑移动1次,其次从右到左 平滑移动1次,再次从上到下平滑移动1次,最后从下到上平滑移动次,如此循环下去。LED显示原理:显示某一个点时,列值设为1,行值设为0即可

电脑屏幕逆时针旋转了90度,这是由于鼠标无意间的错误操作引起的,解决方法是再旋转过来。具体操作如下:1、鼠标点击右键;2、使用键盘上的方向键选择“图形选项”,然后按键盘回车键;3、继续使用方向键,在弹出来的图形选项

这样就完成了旋转90度的旋转了。

文字倒过来可能有两方面原因。1、单元板装反了。这个可能性比较小,专业的工程商是不会犯这种低级错别的。2、软件里没有设置好。首先检查软件是否设置正确,如果软件没问题,那再看是不是单元板装反了。河南华纳电子led显

8X8LED点阵显示数字是90度倒过来是什么情况?

//显示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动态显示程序

显示器图像向左偏移的解决方法一:分辩率一定要设置为显示的标准值;按显示器的的“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,

8.怎么玩转单片机-8位LED左移 包你学会单片机 单片机智能控制,单片机源代码 /*--- 名称:IO口高低电平控制 内容:左移,直至LED全部点亮,左移符号 ---*/ includereg52.h //包含头文件,一般情况不需要改动,头文件

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

这个程序验证过,你可以参考试试://-------------------------------------------//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点阵只能显示一些图形,根本就不能显示汉字的。
8x8LED点阵显示数字 #include #include #define uchar unsigned char #define uint unsigned int uchar code Table_OF_Digits[]= { 0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, 0x00,0x00,0x00,0x21,0x7F,0x01,0x00,0x00, 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, 0x00,0x0C,0x14,0x24,0x7F,0x04,0x00,0x00, 0x00,0x72,0x51,0x51,0x51,0x4E,0x00,0x00, 0x00,0x3E,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4F,0x70,0x00,0x00, 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, 0x00,0x32,0x49,0x49,0x49,0x3E,0x00,0x00, }; uchar i=0,t=0,Num_Index=0; void main() { P3=0x80; Num_Index=0; TMOD=0x00; TH0=(8192-2000)/32; TL0=(8192-2000)%32; TR0=1; IE=0x82; while(1); } void LED_Screen_Display() interrupt 1 { TH0=(8192-2000)/32; TL0=(8192-2000)%32; P3=_crol_(P3,1); P0=~Table_OF_Digits[Num_Index*8+i]; if(++i==8) i=0; if(++t==250) { t=0x00; if(++Num_Index==10) Num_Index=0; } }
#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--; } }
1602 只能显示英日字符,显示中文要自己做字库,而且显示好难看的
#include #include #define uint unsigned int #define uchar unsigned char sbit right=P1^1; sbit left=P1^2; void delay(uint n) { while(n--); } uchar a; void main(void) { right=0; left=0; a=0x80; while(1) { if(right==1) { delay(3000); while(right); a=_cror_(a,1); } else if(left==1) { delay(3000); while(left); a=_crol_(a,1); } P0=a; } } 你看看对不对。
将显示的内容制成三个表: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的加法器)+译码器,实现位选