单片机:并行使数码管逐个显示1-9程序(asm)

如题所述

第1个回答  2013-10-18
/**************************************************************** 程序名称: 数字自动加1计数,数码管显示出来 说明:使用本程序你必须把 SE5设置为ON(2-3)短接 *****************************************************************/

/*头文件*/#include <reg52.h> #include <intrins.h>#define uint unsigned int#define uchar unsigned char

/*端口定义*/
#define sled_dm_port P0 /*定义LED显示的段码数据脚*/#define sled_wm_port P2 /*定义LED显示的位码数据脚*/

/*定义数码管显示字符跟数字的对应数组关系*/uchar mun_to_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/*定义需要点亮的数码管*/uchar code sled_bit_table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

/*1MS为单位的延时程序*/void delay_1ms(uchar x){ uchar j; while(x--){ for(j=0;j<125;j++) {;} } }

/*主程序*/void main(){ uchar i; uchar j; uint count=0; uchar sled_disp_buff[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*寄存8位数码管数据*/ while(1){ for(j=0;j<2;j++){ /*单次字符显示延时*/ for(i=0;i<8;i++){ /*扫描输出8位数码管*/ sled_wm_port = 0xff; /*关闭数码管显示*/ sled_dm_port = sled_disp_buff[i]; /*输出字符代码*/ sled_wm_port = sled_bit_table[i]; /*点亮第i个数码管*/ delay_1ms(1); } } count++; sled_disp_buff[3] = mun_to_char[count/10000]; sled_disp_buff[4] = mun_to_char[count%10000/1000]; sled_disp_buff[5] = mun_to_char[count%1000/100]; sled_disp_buff[6] = mun_to_char[count%100/10]; sled_disp_buff[7] = mun_to_char[count%10]; } }
第2个回答  2013-10-18
MOV DPTR,#LEDMOV R1,#1BBB:MOV A,#0AAA:MOVC A,@A+DPTRMOV P0,ALCALL SHOWINC ACJNE A,#9,AAAJMP BBBSHOW:PUSH AMOV A,R1RR AMOV R1,AMOV P1,A ;数码管选通LCALL DELAYPOP ARETDELAY:MOV R2,#0FFHDJNZ R2,$RETLED:DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND
相似回答