用AT89S51(单片机)设计一个电子钟 以AT89S51为核心组成一个电子钟。电路主要由微处理器(AT89S51)、电源电路、键盘电路和显示电路组成。系统运行时,由8个LED数码管分别显示时、分、秒。在任何时候都可以通过键盘来调 以AT89S51为
程序名称:51单片机数码管电子钟汇编程序 简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒 显示格式:23-59-59(小时十位如果为0则不显示)P0口输出段选信号,P2口输出位选信号 P1.0为调时按钮,P1.1为调
程序设计思路:1.利用单片机内部定时器作为计时器,调用timer函数;2、设计一套按键子程序;(3)设计一套数码显示管子程序。下列提供一套程序供参考。include
这个就是在你的数码管显示语句中,任意加入一个即可 像你说的在小时和分钟之间加一个小数点,那么就加一个小时个位数显示的语句 只是这个增加的语句不是显示数字,是单独显示那个小点而已 循环中,不断的依次点亮四个数字和
用89C51设计LED电子钟6个数码管显示时分秒,要求通过键盘输入初值,打上开关K1时允许设定时间,按下开关K1时开始运行显示时间,K2用做选择是24小时制还是12小时制答得正确又快的可以获 用89C51设计LED电子钟 6个数码管显示时分秒,要求
设计一个数字电子钟,要求可以进行时、分、秒显示,最大显示时间为23:59:59,并且可以通过按键进行时、分调整。画出硬件连接电路图,说明各个控制信号的作用。᠑ 设计一个数字电子钟,要求可以进行时、分、秒显示,最大
数字时钟 这段程序是在PRTUES上完全好使 你可以根据 程序自己在PROTUES上画图 include
51单片机多功能LED点阵显示数字时钟
以下是16x16的点阵LED电子图文显示屏的源程序采用汇编语言编写(也可采用C语言编写,C程序KeiluVision2 V2.30环境下调试通过。以下为用汇编语言编写的字符显示控制程序:;;; * 单个16x16的点阵电子屏字符显示器 ;
如果不正常的第一块有暗亮80%是供电有问题)。4、软件或控制卡问题 LED显示屏参数没有设置好,这个时候就需要确定扫描配置问题,一般是1/4扫;如果不是软件问题,检查控制卡问题;再弄不好,只有联系服务商解决。
16*16点阵用51单片机控制时可以选595或者4094,如果是单个字还可以用三极管作为功率驱动,若是用595的话就不用外加功率驱动电路了,只要在扫描端用三极管隔离154就行(可加限流电阻在三极管基极),同时具有放大作用,若是在数据端
也就是说用四个8*8点阵组合成一个16*16的点阵。比如要显示“你”则相应的点要点亮,由于点阵在列线上是低电平有效,而在行线上是高电平有效,所以要显示“你”字,则它的位代码信息要取反,即所有列(13~16脚)送
可以看到 P0 口控制的是一行,所以用“横向取模”,如果控制的是一列,就要选“纵向取模”。选中“字节倒序”这个选项,点确定后,选择“取模方式”这个菜单,点一下“C51 格式”后,在“点阵生成区”自动产生了8个字节
可进入调试模式,在执行22句后,检查595数据,看看其输出是不是 0xaa,在执行23句后,检查P0口数据,看看是不是 0x7f;
1.当显示器黑屏没有影象显示时(不过目前市面上的显示器在主机没有讯号送来时,萤幕上会显示器"没有讯号线连线"),首先检查主机电源是否插接良好,电源的风扇是否转动?主机面板上电源指示灯、硬碟指示灯是闪否亮?因为若主机电源不工作或
led点阵式显示器只亮一行代码
以下是16x16的点阵LED电子图文显示屏的源程序采用汇编语言编写(也可采用C语言编写,C程序KeiluVision2 V2.30环境下调试通过。以下为用汇编语言编写的字符显示控制程序:;;; * 单个16x16的点阵电子屏字符显示器 ;
要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。
1、并不是字真在移动,只是每次显示的图像不一样的,连续显示16次出来就是移动。比如上下移动,有个函数能显示一个字模数组。把“西”的整个字的字模放到这个数组显示的是西字,把“安”放进去就是安字。把西字16行的
使用的单片机仿真试验仪型号为DP-51PRO以下的程序是在8x8led显示频上显示一个心形我需要将它移动起来CLKEQUP3.2DINAEQUP3.3DINBEQUP3.4CLEAREQUP3.5org0000hajmpmainorg0100hmain:mov 使用的单片机仿真试验仪型号为DP-51PRO以下的程序
include
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
第一步,先将Proteus运行起来,同样新建一个Arduino 328的项目,自己为项目取个名字,此处取名为LEDMatrix。第二步,要从元件库当中找到LED点阵,并添加到工作区。点击左侧“Component Mode”按钮——点击“P”按钮——在输入
LED点阵程序
按行取模可以向上移动,按列取模才可以向左移动。以按列取模为例,每个字的字模表中第1,2字节送LED屏第一列显示,依次显其余15列。假如显示0.5秒(时间可以调),再取字模的第3,4字节,还送LED屏第一列显示,依此
void delay1ms(unsigned int ms);//延时ms函数声明(可根据实际情况更改)unsigned char code led0[]={};//字码表,你自己把你要显示的字码放进去就可以了 void main(){ unsigned char w,i;while(1){ //显示0 w
1、并不是字真在移动,只是每次显示的图像不一样的,连续显示16次出来就是移动。比如上下移动,有个函数能显示一个字模数组。把“西”的整个字的字模放到这个数组显示的是西字,把“安”放进去就是安字。把西字16行的
MOVX @DPTR,A MOV A,#0FFH ;关闭LED行显示 MOV DPTR,#CSr1 MOVX @DPTR,A MOV DPTR,#CSr2 MOVX @DPTR,A D: MOV R5,#00H ;设定汉字表格初始值 MOV R4,#01H ;设定列扫描初始值,从第一列开始 DISP
怎样用C语言实现LED点阵显示汉字 年 的移动代码
1、并不是字真在移动,只是每次显示的图像不一样的,连续显示16次出来就是移动。比如上下移动,有个函数能显示一个字模数组。把“西”的整个字的字模放到这个数组显示的是西字,把“安”放进去就是安字。把西字16行的后15行字模信息接上安的第1行(一共就是16行)放到一起作为一个字模数组显示出来就是下移了一格,把西后14行接安的前2行(共16行)放到一起作为一个字模数组显示出来就是下移了两格,依次排下去到16次的时候就完整下移一个字了。左右一样的,把“西”每行的后15列接上“安”每行的第一列作为一个数组显示就是左移一位,同理依次移下去16次一个字的左移就实现这个效果了。 2、例程: #include//sbit A=P2^0;//sbit B=P2^1;//sbit C=P2^2;//sbit select=P2^3;sbit clk=P3^0; //595串行时钟端sbit da=P3^1; //595串行数据端sbit enable=P3^2;/************************************字库**********************************************/unsigned char code stable[]={/*-- 文字: 天 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x40,0x40,0x42,0x20,0x42,0x10,0x42,0x08,0x42,0x06,0x42,0x01,0xFE,0x02,0x42,0x04,0x42,0x08,0x42,0x10,0x42,0x30,0x42,0x60,0x42,0x20,0x40,0x00,0x00,/*-- 文字: 天 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x40,0x40,0x42,0x20,0x42,0x10,0x42,0x08,0x42,0x06,0x42,0x01,0xFE,0x02,0x42,0x04,0x42,0x08,0x42,0x10,0x42,0x30,0x42,0x60,0x42,0x20,0x40,0x00,0x00,/*-- 文字: 快 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x70,0x00,0x00,0xFF,0xFF,0x00,0x08,0x80,0xB0,0x40,0x88,0x30,0x88,0x0E,0x88,0x01,0xFF,0x06,0x88,0x08,0x88,0x30,0x88,0x60,0xF8,0xC0,0x80,0x40,0x80,0x00,0x00,/*-- 文字: 乐 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x20,0x00,0x18,0x40,0x0C,0xFC,0x07,0x44,0x12,0x44,0x20,0x44,0x40,0x46,0x3F,0xFA,0x00,0x42,0x00,0x43,0x02,0x43,0x0C,0x42,0x38,0x40,0x10,0x00,0x00,0x00,/*-- 文字: ! --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0xDF,0xFC,0xDF,0xFC,0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: 欢 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x14,0x10,0x24,0x4C,0x44,0x43,0x84,0x43,0x64,0x2C,0x1C,0x20,0x20,0x10,0x18,0x0C,0x0F,0x03,0xE8,0x06,0x08,0x18,0x08,0x30,0x28,0x60,0x18,0x20,0x08,0x00,0x00,/*-- 文字: 迎 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x40,0x20,0x41,0x1F,0xCE,0x20,0x04,0x40,0x00,0x47,0xFC,0x42,0x04,0x41,0x02,0x40,0x02,0x5F,0xFC,0x40,0x04,0x42,0x04,0x44,0x04,0x43,0xFC,0x40,0x00,0x00,0x00,/*-- 文字: 来 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x00,0x20,0x80,0x10,0x84,0x10,0x84,0x08,0x94,0x04,0xA4,0x02,0xC4,0xFF,0xFF,0x01,0x84,0x02,0xC4,0x04,0xB4,0x08,0x94,0x18,0x84,0x30,0x84,0x10,0x80,0x00,0x00,/*-- 文字: 我 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x04,0x20,0x04,0x20,0x42,0x22,0x82,0x22,0x7F,0xFE,0x01,0x21,0x01,0x21,0x10,0x20,0x10,0x20,0x08,0xFF,0x07,0x20,0x1A,0x22,0x21,0xAC,0x40,0x20,0xF0,0x20,0x00,0x00,/*-- 文字: 的 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x7F,0xF8,0x10,0x8C,0x10,0x8B,0x10,0x88,0x3F,0xF8,0x00,0x40,0x00,0x30,0x00,0x8F,0x03,0x08,0x26,0x08,0x40,0x08,0x20,0x08,0x1F,0xF8,0x00,0x00,0x00,0x00,/*-- 文字: 空 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x10,0x40,0x0C,0x40,0x84,0x41,0x44,0x41,0x24,0x41,0x14,0x41,0x05,0x7F,0x06,0x41,0x04,0x41,0x14,0x41,0x24,0x41,0x44,0x40,0x84,0x40,0x14,0x00,0x0C,0x00,0x00,/*-- 文字: 间 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFF,0xF8,0x00,0x01,0x00,0x06,0x00,0x00,0x07,0xF0,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0x92,0x07,0xF2,0x40,0x02,0x80,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,/*-- 文字: 天 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x40,0x40,0x42,0x20,0x42,0x10,0x42,0x08,0x42,0x06,0x42,0x01,0xFE,0x02,0x42,0x04,0x42,0x08,0x42,0x10,0x42,0x30,0x42,0x60,0x42,0x20,0x40,0x00,0x00,};/*************************************************************************************** 行显示子程序 实质是给当前行中的所有列传送两字节的数据 ***************************************************************************************/void hang_disp(unsigned char temp1,unsigned char temp2){ unsigned char i; for(i=0;i>1; } enable=0;enable=1;enable=0; /****595并行输出使能****/}/*************************************************************************************** 清行子程序 如果没有清行程序,该行显示完转到下一行时595的输出还没有变,还是上一行的数据 ,因为程序中是先选定行,再向595传数据的,所以下一行开始时有一段时间是显示合一行的内容的,这段时间就是向595传两个字节数据的时间。/***************************************************************************************/void hang_clear(){ unsigned char i; for(i=0;i<16;i++) { da=0; /***595的输出连接的是点阵的阴极,所以让595输出高电平,可以使得该行的LED熄灭****/ clk=0;clk=1;clk=0; } enable=0;enable=1;enable=0;}/***************************************************************************************//***************************************************************************************/unsigned int count=0;unsigned char move=0;void disp(){ unsigned char i; unsigned int j; count++; for(i=0;i<16;i++) { P2=i; /*****选定行*****/ //hang_disp(stable[2*(i+move)],stable[2*(i+move)+1]); /***从字库中取数据****/ hang_disp(~stable[2*(i+move)],~stable[2*(i+move)+1]); /***从字库中取数据再取反,能实现反显****/ for(j=0;j<10;j++); /***显示和清零间加以延时,以便显示明显,可以自行调节,也可以去掉***/ hang_clear(); } if(count==10) /***调节移动的速度***/ { count=0; move++; if(move==192) /***调节移动的字数***n=move/16***/ { move=0; } } }/***************************************************************************************//***************************************************************************************/main(){ while(1) { disp(); }}#include//单片机头文件 void delay1ms(unsigned int ms);//延时ms函数声明(可根据实际情况更改) unsigned char code led0[]={};//字码表,你自己把你要显示的字码放进去就可以了 void main() { unsigned char w,i; while(1) { //显示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 int i,j; for(i=0;i<ms;i++) for(j=0;j<110;j++) }
你的程序没有问题的,估计是,你的程序与你的开发板上74HC595的引脚不符吧。下图是根据你的程序画的仿真图,程序没有变,只是把显示的图形数据变了一下,显示出菱形。 u8 code duanled[]= { /*-- 调入了一幅图像:这是您新建的图像 --*/ /*-- 宽度x高度=8x8 --*/ 0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00 };
#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--; } }
KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HMIN EQU 79HHOUR EQU 7AHPAUSE BIT 00HDOT BIT 01HORG 0000HLJMP MAINORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#11H MOV TH0,#03CH MOV TL0,#0B0H MOV TH1,#0ECH MOV TL1,#078H MOV KEYVAL,#0 MOV SCANLED,#0 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 MOV CLK,#0 CLR PAUSE SETB EA SETB ET1 SETB TR1LOOP: LCALL KEYSEL MOV A,KEYVAL CJNE A,#0FFH,LOOP1 SJMP LOOPLOOP1: CJNE A,#10,LOOP2 ;“ON”启动 SETB TR0 SETB ET0 SETB PAUSE SJMP LOOPLOOP2: CJNE A,#11,LOOP3 ;“=”清零 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 LCALL DISCHG SJMP LOOPLOOP3: CJNE A,#15,LOOP4 ;“+”暂停 CLR TR0 CLR ET0 CLR PAUSE SJMP LOOPLOOP4: CJNE A,#14,LOOP5 ;“-”清显示暂停 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H CLR TR0 CLR ET0 CLR PAUSE SJMP LOOPLOOP5: CJNE A,#10,LOOP6 ;数字键LOOP6: JC LOOP7 LJMP LOOPLOOP7: JNB PAUSE,LOOP8 ;暂停状态可以输入数字键 LJMP LOOPLOOP8: MOV 33H,34H MOV 34H,35H MOV 35H,36H MOV 36H,37H MOV 37H,38H MOV 38H,KEYVAL MOV A,33H SWAP A ORL A,34H LCALL BCDH MOV HOUR,A MOV A,35H SWAP A ORL A,36H LCALL BCDH MOV MIN,A MOV A,37H SWAP A ORL A,38H LCALL BCDH MOV SEC,A LJMP LOOP;------------------;BCD转换为十六进制BCDH: MOV B,#10H DIV AB MOV R7,B MOV B,#10 MUL AB ADD A,R7 RET ;------------------;十六进制转换为BCDHBCD: MOV B,#10 DIV AB SWAP A ORL A,B RET ;------------------KEYSEL: MOV KEYVAL,#0 MOV KEYSCAN,#0EFH LCALL GETKEY MOV A,KEYTM JZ KEYS1 MOV KEYVAL,A SJMP KEYRTNKEYS1: MOV KEYSCAN,#0DFH LCALL GETKEY MOV A,KEYTM JZ KEYS2 CLR C ADD A,#4 MOV KEYVAL,A SJMP KEYRTNKEYS2: MOV KEYSCAN,#0BFH LCALL GETKEY MOV A,KEYTM JZ KEYS3 CLR C ADD A,#8 MOV KEYVAL,A SJMP KEYRTNKEYS3: MOV KEYSCAN,#7FH LCALL GETKEY MOV A,KEYTM JZ KEYRTN CLR C ADD A,#12 MOV KEYVAL,AKEYRTN: LCALL CHGKEY RET;--------------------GETKEY: MOV KEYTM,#0 MOV A,KEYSCAN MOV P3,A NOP MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY MOV R2,#10 LCALL DELAY MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY MOV A,P3 ANL A,#0FH MOV R7,ASF: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ SF MOV A,R7 CJNE A,#0EH,NK1 MOV KEYTM,#1 SJMP NOKEYNK1: CJNE A,#0DH,NK2 MOV KEYTM,#2 SJMP NOKEYNK2: CJNE A,#0BH,NK3 MOV KEYTM,#3 SJMP NOKEYNK3: CJNE A,#07H,NOKEY MOV KEYTM,#4NOKEY: RET;--------------------DELAY: MOV R3,#50DELAY1: MOV R4,#100 DJNZ R4,$ DJNZ R3,DELAY1 DJNZ R2,DELAY RET;--------------------T0ISR: PUSH ACC CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC CLK MOV A,CLK CJNE A,#20,T0ISRE MOV CLK,#0 INC SEC MOV A,SEC CJNE A,#60,T0ISRE MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,T0ISRE MOV MIN,#0 INC HOUR MOV A,HOUR CJNE A,#24,T0ISRE MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0T0ISRE: LCALL DISCHG POP ACC RETI;--------------------DISCHG: MOV A,HOUR LCALL HBCD PUSH ACC ANL A,#0FH MOV 34H,A POP ACC ANL A,#0F0H SWAP A MOV 33H,A MOV A,MIN LCALL HBCD PUSH ACC ANL A,#0FH MOV 36H,A POP ACC ANL A,#0F0H SWAP A MOV 35H,A MOV A,SEC LCALL HBCD PUSH ACC ANL A,#0FH MOV 38H,A POP ACC ANL A,#0F0H SWAP A MOV 37H,A RET;--------------------T1ISR: PUSH ACC CLR TR1 MOV TH1,#0ECH MOV TL1,#78H SETB TR1 MOV DPTR,#LEDTABT100: MOV R0,#DAT MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T101 MOV P2,#01H CLR DOT SJMP T1DIST101: DEC A JNZ T102 MOV P2,#02H SETB DOT SJMP T1DIST102: DEC A JNZ T103 MOV P2,#04H CLR DOT SJMP T1DIST103: DEC A JNZ T104 MOV P2,#08H SETB DOT SJMP T1DIST104: DEC A JNZ T105 MOV P2,#10H CLR DOT SJMP T1DIST105: MOV P2,#20H CLR DOTT1DIS: MOV A,@R0 MOVC A,@A+DPTR JNB DOT,T1DIS1 ORL A,#01HT1DIS1: CPL A MOV P0,A INC SCANLED MOV A,SCANLED CJNE A,#6,T1END MOV SCANLED,#0T1END: POP ACC RETI;--------------------CHGKEY: MOV A,KEYVAL JZ KV16 DEC A JNZ KV01 MOV KEYVAL,#7 RETKV01: DEC A JNZ KV02 MOV KEYVAL,#4 RETKV02: DEC A JNZ KV03 MOV KEYVAL,#1 RETKV03: DEC A JNZ KV04 MOV KEYVAL,#10 RETKV04: DEC A JNZ KV05 MOV KEYVAL,#8 RETKV05: DEC A JNZ KV06 MOV KEYVAL,#5 RETKV06: DEC A JNZ KV07 MOV KEYVAL,#2 RETKV07: DEC A JNZ KV08 MOV KEYVAL,#0 RETKV08: DEC A JNZ KV09 MOV KEYVAL,#9 RETKV09: DEC A JNZ KV10 MOV KEYVAL,#6 RETKV10: DEC A JNZ KV11 MOV KEYVAL,#3 RETKV11: DEC A JNZ KV12 MOV KEYVAL,#11 RETKV12: DEC A JNZ KV13 MOV KEYVAL,#12 RETKV13: DEC A JNZ KV14 MOV KEYVAL,#13 RETKV14: DEC A JNZ KV15 MOV KEYVAL,#14 RETKV15: DEC A JNZ KV16 MOV KEYVAL,#15 RETKV16: MOV KEYVAL,#0FFH RET;--------------------LEDTAB: DB 0FCH ;"0" 00H DB 60H ;"1" 01H DB 0DAH ;"2" 02H DB 0F2H ;"3" 03H DB 66H ;"4" 04H DB 0B6H ;"5" 05H DB 0BEH ;"6" 06H DB 0E0H ;"7" 07H DB 0FEH ;"8" 08H DB 0F6H ;"9" 09H DB 0EEH ;"A" 0AH DB 3EH ;"B" 0BH DB 9CH ;"C" 0CH DB 7AH ;"D" 0DH DB 9EH ;"E" 0EH DB 8EH ;"F" 0FH DB 00H ;" " 10H;--------------------END
你好!四个数码管,怎么来实现时分秒的显示,至少也要6个数码管吧 程序什么时间要?原理图确定了吗