在蓝桥杯备赛中练习的小程序,由于个人能力有限,有什么问题欢迎留贴!本人练习板子关于数码管显示采用74LS138芯片,有相同板子关于代码问题,或者好的设计思路,希望能够提出宝贵意见。
/******************************************************************************
【编写时间】2019年1月25日
【作 者】黄金机器人
【试验平台】开拓者开发板
【外部晶振】11.0592mhz
【芯 片】STC89C52
【编译环境】Keil uVision5
【说 明】本代码均以在开发板山测试通过,仅供大家参考
******************************************************************************/
1、在数码管上显示字符8,每1秒移动一位
#include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// void delayms(u16 n) { u8 i; while(n--) { for(i=0;i<113;i++); } } void switch138(u8 i) { switch(i) { case(0): LSA=0;LSB=0;LSC=0; break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; case(3): LSA=1;LSB=1;LSC=0; break; case(4): LSA=0;LSB=0;LSC=1; break; case(5): LSA=1;LSB=0;LSC=1; break; case(6): LSA=0;LSB=1;LSC=1; break; case(7): LSA=1;LSB=1;LSC=1; break; } } void main() { while(1) { u8 i; for(i=0;i<8;i++) { switch138(i); P0=smgduan[8]; delayms(1000); P0=0x00; } } }
2、在数码管上稳定显示字符12345678
#include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 n) { while(n--); { u8 i; for(i=0;i<113;i++); } } void switch138(u8 i) { switch(i) { case(0): LSA=0;LSB=0;LSC=0; break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; case(3): LSA=1;LSB=1;LSC=0; break; case(4): LSA=0;LSB=0;LSC=1; break; case(5): LSA=1;LSB=0;LSC=1; break; case(6): LSA=0;LSB=1;LSC=1; break; case(7): LSA=1;LSB=1;LSC=1; break; } } void main() { while(1) { u16 j; for(j=0;j<8;j++) { switch138(j); P0=smgduan[j+1]; delay(1); P0=0x00; } } }
3、在数码管上稳定显示给定字符0000-1023或者000H-3FFH
#include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; u8 code smgwei[8]={0x3f,0x3f,0x3f,0x3f,0x06,0x3f,0x5b,0x4f};//显示0000-1023 void delayms(u16 n) { while(n--) { u8 i; for(i=0;i<113;i++); } } void switch138(u16 i) { switch(i) { case(0): LSA=0;LSB=0;LSC=0;break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; case(3): LSA=1;LSB=1;LSC=0; break; case(4): LSA=0;LSB=0;LSC=1; break; case(5): LSA=1;LSB=0;LSC=1; break; case(6): LSA=0;LSB=1;LSC=1; break; case(7): LSA=1;LSB=1;LSC=1; break; } } void main() { while(1) { u8 j; for(j=0;j<8;j++) { switch138(j); P0=smgwei[j]; delayms(1); P0=0x00; } } }