您的位置 首页 FPGA

51单片机对8位数码管顺次显现0-7的规划

51单片机对8位数码管依次显示0-7的设计-共阳极数组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口。

共阳极数组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 }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/346114.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部