51单片机对8位数码管依次显示0-7的设计

发布时间:2023-02-08  

共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90}

共阳极数组A~F:display[]={0x88,0x83,0xA6,0xC1,0x86,0x8E}

共阴极数组0~9:display[]={0x3F,0x06,0x5B,0x4F,0x6E,0x6D,0x7D,0x07,0x7F,0x6F}

共阴极数组A~F:display[]={0x77,0x7C,0x59,0x3E,0x79,0x71}

共阴、两组四位一体数码管,位选接74LS138译码器,输入(位选)CBA接P20,P21,P22。段选通过74573后接P1口。

若不使用译码器,可直接将位选段接IO口,赋值改变。

51单片机对8位数码管依次显示0-7的设计

/*******************************************************************************

2 * 实 验 名 : 动态数码管显示

3 * 实验说明 : 8位数码管依次显示0~7

*******************************************************************************/

8 #include

9

10 #define GPIO_DIG P1 //Digitron 数码管

11 sbit LSA= P2^0;

12 sbit LSB= P2^1;

13 sbit LSC= P2^2;

14

15 unsigned char code DIG_CODE[10]={

16 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的显示码

17 void DigDisplay();

18

19 void main(void)

20 {

21 while(1)

22 DigDisplay();

23 }

24

25

26 void DigDisplay()

27 {

28 unsigned char i;

29 unsigned int j;

30 for(i=0;i《8;i++)

31 {

32 switch(i) //位选,选择点亮的数码管,

33 {

34 case(0):

35 LSA=0;LSB=0;LSC=0; break;//显示第0位

36 case(1):

37 LSA=1;LSB=0;LSC=0; break;//显示第1位

38 case(2):

39 LSA=0;LSB=1;LSC=0; break;//显示第2位

40 case(3):

41 LSA=1;LSB=1;LSC=0; break;//显示第3位

42 case(4):

43 LSA=0;LSB=0;LSC=1; break;//显示第4位

44 case(5):

45 LSA=1;LSB=0;LSC=1; break;//显示第5位

46 case(6):

47 LSA=0;LSB=1;LSC=1; break;//显示第6位

48 case(7):

49 LSA=1;LSB=1;LSC=1; break;//显示第7位

50 }

51 GPIO_DIG=DIG_CODE[i];//发送段码

52 j=10000; //扫描间隔时间设定,若减少j,可观察到稳定显示的0~7 (扫描速度太快,人眼识别不了)

53 while(j--);

54 GPIO_DIG=0x00;//消隐

55 }

56 }

1 /*******************************************************************************

2 * 实 验 名 : 数码管秒表显示

3 * 实验说明 : 0~59依次显示

*******************************************************************************/

8 #include

9

10 #define GPIO_DIG P1 //Digitron 数码管

11 #define uchar unsigned char

12 #define uint unsigned int

13 sbit LSA= P2^0;

14 sbit LSB= P2^1;

15 sbit LSC= P2^2;

16

17 uchar shi,ge,num1=0,num=0;

18 uchar code DIG_CODE[10]={

19 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9的显示码

20 void Delay5ms();

21 void DigDisplay(uchar shi,uchar ge);

22

23

24 void main()

25 { //200微秒@20MHz

26 TMOD = 0x01; //设置定时器模式

27 TL0 = 0xA8; //设置定时初值

28 TH0 = 0xFD; //设置定时初值

29 EA = 1; // 开总中断

30 TF0 = 0; //清除TF0标志

31 ET0 = 1; // 开定时器0中断

32 TR0 = 1; //定时器0开始计时

33 while(1)

34 {

35 DigDisplay(shi,ge);

36 }

37 }

38

39 void DigDisplay(uchar shi,uchar ge)

40 {

41 GPIO_DIG=DIG_CODE[shi]; //段选

42 LSA=0;LSB=0;LSC=0;

43 Delay5ms();

44 GPIO_DIG=DIG_CODE[ge];

45 LSA=1;LSB=0;LSC=0;

46 Delay5ms();

47 }

48

49 void TImer0Init(void) interrupt 1

50 {

51 TL0 = 0xA8; //重装初

52 TH0 = 0xFD;

53 num1++;

54 if(num1==200) //5次200ms即为1s到

55 {

56 num1=0;

57 num++;

58 if(num==60)

59 num=0;

60 shi=num/10;

61 ge = num%10;

62 }

63 }

64

65

66 void Delay5ms() //@12.000MHz

67 {

68 unsigned char i, j;

69

70 i = 59;

71 j = 90;

72 do

73 {

74 while (--j);

75 } while (--i);

76 }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    =0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1…Q8(第3-6和10-13管脚)并行输出端分别接LED数码管显示器各段对应的管脚上。在74LS164获得时钟脉冲的瞬间,如果......
    据缓存区         LedBuf[1]=0;         LedBuf[2]=2;         LedBuf[3]=3;         DisplaySmg();    //调用数码管显示......
        2    3    4    共阴则取反                          //静态数码管显示    void static_pile(unsigned char number......
    }; //数码管显示09的段码表,程序运行中当数组值不发生变化时, //前面加关键字code,可以大大节约单片机的存储空间 P2=0xfe;   //P2.0引脚输出低电平,数码显示器DS0接通......
    ;                 for(i=0;i<5000;i++)                 {                     DisplaySmg();    //调用数码管显示函数,该函......
    ,seg_data_2,seg_led_1,seg_led_2);  input [3:0] seg_data_1; //数码管需要显示0~9十个数字,所以最少需要4位输入做译码 input......
    单片机数码管显示0~9;任务描述: 某企业承担了一个LED数码显示设计任务;要求单片机控制一个数码管显示0→1→2→3→4→5→6→7→8→9,每个状态停留1秒。请用......
    。如果要让共阴数码管显示数字0,即对应的段ABCDEF 要点亮即给它高电平,其他的段熄灭即给它低电平。其他的数字显示方式一样,这里就不多说。下面给出共阴和共阳数码管0-F 段码......
    器实验一样,通过组合逻辑的输出来控制数码管显示数字,下面是数码管显示的表格 这其实是一个4-16译码器,如果我们想数码管能显示16进制可以全译码,如果只想显示数字,可以只利用其中10个译码 4. 用......
    设计方法 (1. 动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms4ms之间......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>