当前位置:   article > 正文

STC89C52单片机的基础项目代码_stc89c52单片机项目

stc89c52单片机项目

开发板

本人开发板:普中科技

 

C语言问题

1、使用  _nop_();   需要写头文件        #include "intrins.h"

2、!  取反符号

项目实验

都是基础简单实现对应功能。

LED灯的闪烁

电路连接情况

JP12 与 JP10  导线连接;LE 与 VCC跳线帽连接。

代码

  1. #include <STC89C5xRC.H>
  2. sbit D11 = P0^0;
  3. sbit D12 = P0^1;
  4. sbit D13 = P0^2;
  5. sbit D14 = P0^3;
  6. sbit D15 = P0^4;
  7. sbit D16 = P0^5;
  8. sbit D17 = P0^6;
  9. sbit D18 = P0^7;
  10. void Delay300ms() //@11.0592MHz
  11. {
  12. unsigned char i, j, k;
  13. i = 13;
  14. j = 156;
  15. k = 83;
  16. do
  17. {
  18. do
  19. {
  20. while (--k);
  21. } while (--j);
  22. } while (--i);
  23. }
  24. int main()
  25. {
  26. P0=0X00;
  27. while(1)
  28. {
  29. D11=1; D12=0; D13=1; D14=0;
  30. D15=1; D16=0; D17=1; D18=0;
  31. Delay300ms();
  32. D11=0; D12=1; D13=0; D14=1;
  33. D15=0; D16=1; D17=0; D18=1;
  34. Delay300ms();
  35. }
  36. }

结果

LED灯交替闪烁。

独立按键

电路连接情况

JP5与JP11 导线连接。

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. sbit D11 = P0^0;
  4. sbit D12 = P0^1;
  5. sbit D13 = P0^2;
  6. sbit D14 = P0^3;
  7. sbit D15 = P0^4;
  8. sbit D16 = P0^5;
  9. sbit D17 = P0^6;
  10. sbit D18 = P0^7;
  11. sbit K1 = P2^0;
  12. sbit K2 = P2^1;
  13. sbit K3 = P2^2;
  14. sbit K4 = P2^3;
  15. sbit K5 = P2^4;
  16. sbit K6 = P2^5;
  17. sbit K7 = P2^6;
  18. sbit K8 = P2^7;
  19. void Delay5ms() //@11.0592MHz
  20. {
  21. unsigned char i, j;
  22. _nop_();
  23. _nop_();
  24. i = 54;
  25. j = 198;
  26. do
  27. {
  28. while (--j);
  29. } while (--i);
  30. }
  31. void Key_scan()
  32. {
  33. if(K1==0)
  34. {
  35. Delay5ms();
  36. if(K1==0)
  37. {
  38. D11=1;
  39. while(K1==0);
  40. }
  41. }
  42. else if(K2==0)
  43. {
  44. Delay5ms();
  45. if(K2==0)
  46. {
  47. D12=1;
  48. while(K2==0);
  49. }
  50. }
  51. else if(K3==0)
  52. {
  53. Delay5ms();
  54. if(K3==0)
  55. {
  56. D13=1;
  57. while(K3==0);
  58. }
  59. }
  60. else if(K4==0)
  61. {
  62. Delay5ms();
  63. if(K4==0)
  64. {
  65. D14=1;
  66. while(K4==0);
  67. }
  68. }
  69. else if(K5==0)
  70. {
  71. Delay5ms();
  72. if(K5==0)
  73. {
  74. D15=1;
  75. while(K5==0);
  76. }
  77. }
  78. else if(K6==0)
  79. {
  80. Delay5ms();
  81. if(K6==0)
  82. {
  83. D16=1;
  84. while(K6==0);
  85. }
  86. }
  87. else if(K7==0)
  88. {
  89. Delay5ms();
  90. if(K7==0)
  91. {
  92. D17=!D17;
  93. while(K7==0);
  94. }
  95. }
  96. else if(K8==0)
  97. {
  98. Delay5ms();
  99. if(K8==0)
  100. {
  101. D18=!D18;
  102. while(K8==0);
  103. }
  104. }
  105. }
  106. int main()
  107. {
  108. P0=0X00;
  109. while(1)
  110. {
  111. Key_scan();
  112. }
  113. }

结果

按键K1-K6,按下开启D11 - D16;   K7、K8按下D17、D18取反,为亮或灭;

按键点亮数码管

电路连接情况

静态共阳数码管 JP3与P1导线连接;按键为K1;

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define SMG_display P1
  4. sbit K1 = P2^0;
  5. unsigned char code SMG_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //共阳编码 高电平熄灭
  6. 0xff,0xc1,0x8c,0xc8}; // off U P n
  7. //unsigned char code SMG_code[18] = { // 共阴编码 (高电平点亮)
  8. // 0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
  9. // 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0xff, 0x00};
  10. unsigned char count;
  11. void Delay5ms() //@11.0592MHz
  12. {
  13. unsigned char i, j;
  14. _nop_();
  15. _nop_();
  16. i = 54;
  17. j = 198;
  18. do
  19. {
  20. while (--j);
  21. } while (--i);
  22. }
  23. void Key_scan()
  24. {
  25. if(K1==0)
  26. {
  27. Delay5ms();
  28. if(K1==0)
  29. {
  30. D11=1;
  31. SMG_display=SMG_code[count++];
  32. if(count>=14)
  33. count=0;
  34. while(K1==0);
  35. }
  36. }
  37. }
  38. int main()
  39. {
  40. SMG_display=SMG_code[0];
  41. while(1)
  42. {
  43. Key_scan();
  44. }
  45. }

结果

多次按下K1,数码管显示依次为  0到9,“全灭,P,U,n ”

动态数码管显示

电路连接情况

数码管为共阴。

J12与PI 导线连接;J21中LE与VCC连接;J16与J15连接;

J6中3(A)接P22;        2(B)接P23;       1(C)接P24;

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define SMG_display P1
  4. sbit LSA = P2^2; // 控制位选的IO
  5. sbit LSB = P2^3;
  6. sbit LSC = P2^4;
  7. // 显示内容
  8. //unsigned char code SMG_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //
  9. // 0xff,0xc1,0x8c,0xc8}; // off U P n
  10. // 显示缓存
  11. unsigned char code SMG_buff[8]={0,1,2,3,4,5,6,7};
  12. unsigned char code SMG_code[18] = { // 共阴编码 (高电平熄灭、低电平点亮)
  13. 0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
  14. 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0xff, 0x00};
  15. void Display()
  16. {
  17. unsigned char i;
  18. unsigned int j;
  19. for (i = 0; i < 8; i++)
  20. {
  21. switch (i)
  22. {
  23. case 0: LSA=0; LSB=0; LSC=0; break; // 选择第1个数码管
  24. case 1: LSA=1; LSB=0; LSC=0; break; // 选择第2个数码管
  25. case 2: LSA=0; LSB=1; LSC=0; break; // 选择第3个数码管
  26. case 3: LSA=1; LSB=1; LSC=0; break; // 选择第4个数码管
  27. case 4: LSA=0; LSB=0; LSC=1; break; // 选择第5个数码管
  28. case 5: LSA=1; LSB=0; LSC=1; break; // 选择第6个数码管
  29. case 6: LSA=0; LSB=1; LSC=1; break; // 选择第5个数码管
  30. case 7: LSA=1; LSB=1; LSC=1; break; // 选择第6个数码管
  31. }
  32. SMG_display = SMG_code[SMG_buff[i]]; // 显示对应数码管的值
  33. j = 200; // 延长数码管显示的持续时间
  34. while (j--);
  35. SMG_display = 0x00; // 关闭当前数码管,为下一个数码管显示做准备
  36. }
  37. }
  38. int main()
  39. {
  40. while(1)
  41. {
  42. Display();
  43. }
  44. }

结果:

八个数码管依次显示:0 到 7

矩阵按键

电路连接情况

JP4接P0引脚;        

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define SMG_display P1
  4. #define KEY_in P0
  5. sbit LSA = P2^2; // 控制位选的IO
  6. sbit LSB = P2^3;
  7. sbit LSC = P2^4;
  8. unsigned char SMG_buff[8]={17,17,17,17,17,17,17,17};
  9. unsigned char code SMG_code[18] = { // 共阴编码 (高电平熄灭、低电平点亮)
  10. 0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, //0-9
  11. 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0xff, 0x00}; //
  12. unsigned char KeyValue;
  13. void Display()
  14. {
  15. unsigned char i;
  16. unsigned int j;
  17. for (i = 0; i < 8; i++)
  18. {
  19. switch (i)
  20. {
  21. case 0: LSA=0; LSB=0; LSC=0; break; // 选择第1个数码管
  22. case 1: LSA=1; LSB=0; LSC=0; break; // 选择第2个数码管
  23. case 2: LSA=0; LSB=1; LSC=0; break; // 选择第3个数码管
  24. case 3: LSA=1; LSB=1; LSC=0; break; // 选择第4个数码管
  25. case 4: LSA=0; LSB=0; LSC=1; break; // 选择第5个数码管
  26. case 5: LSA=1; LSB=0; LSC=1; break; // 选择第6个数码管
  27. case 6: LSA=0; LSB=1; LSC=1; break; // 选择第5个数码管
  28. case 7: LSA=1; LSB=1; LSC=1; break; // 选择第6个数码管
  29. }
  30. SMG_display = SMG_code[SMG_buff[i]]; // 显示对应数码管的值
  31. j = 200; // 延长数码管显示的持续时间
  32. while (j--);
  33. SMG_display = 0x00; // 关闭当前数码管,为下一个数码管显示做准备
  34. }
  35. }
  36. void Delay5ms() //@11.0592MHz
  37. {
  38. unsigned char i, j;
  39. _nop_();
  40. _nop_();
  41. i = 54;
  42. j = 198;
  43. do
  44. {
  45. while (--j);
  46. } while (--i);
  47. }
  48. void Key_scan() // 取键值函数
  49. {
  50. unsigned char keyState = KEY_in;
  51. unsigned char X, Y, Z;
  52. KeyValue = 0xFF; // 初始化KeyValue为0xFF,即无键按下的状态
  53. KEY_in = 0x0f; // 先对P1置数进行行扫描
  54. if (KEY_in != 0x0f) // 判断是否有键按下
  55. {
  56. Delay5ms(); // 延时,软件去干扰
  57. if (KEY_in != 0x0f) // 确认按键按下
  58. {
  59. X = KEY_in; // 保存行扫描时有键按下时状态
  60. KEY_in = 0xf0; // 列扫描
  61. Y = KEY_in; // 保存列扫描时有键按下时状态
  62. Z = X | Y; // 取出键值
  63. // 根据取出的键值判断是哪一个键被按下
  64. switch (Z)
  65. {
  66. case 0xee: KeyValue = 1; break;
  67. case 0xde: KeyValue = 2; break;
  68. case 0xbe: KeyValue = 3; break;
  69. case 0x7e: KeyValue = 4; break;
  70. case 0xed: KeyValue = 5; break;
  71. case 0xdd: KeyValue = 6; break;
  72. case 0xbd: KeyValue = 7; break;
  73. case 0x7d: KeyValue = 8; break;
  74. case 0xeb: KeyValue = 9; break;
  75. case 0xdb: KeyValue = 10; break;
  76. case 0xbb: KeyValue = 11; break;
  77. case 0x7b: KeyValue = 12; break;
  78. case 0xe7: KeyValue = 13; break;
  79. case 0xd7: KeyValue = 14; break;
  80. case 0xb7: KeyValue = 15; break;
  81. case 0x77: KeyValue = 16; break;
  82. }
  83. SMG_buff[0]=KeyValue;
  84. }
  85. }
  86. }
  87. int main()
  88. {
  89. while(1)
  90. {
  91. Key_scan();
  92. Display();
  93. }
  94. }

结果:

矩阵按键依次按下:数码管依次显示为:1-9,a-f, 全亮 

蜂鸣器继电器

电路连接情况

蜂鸣器接P21;继电器接P20;

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define KEY_in P0
  4. sbit Relay = P2^0;
  5. sbit Buzzer = P2^1;
  6. unsigned char KeyValue;
  7. void Delay5ms() //@11.0592MHz
  8. {
  9. unsigned char i, j;
  10. _nop_();
  11. _nop_();
  12. i = 54;
  13. j = 198;
  14. do
  15. {
  16. while (--j);
  17. } while (--i);
  18. }
  19. void Key_scan() // 取键值函数
  20. {
  21. unsigned char keyState = KEY_in;
  22. unsigned char X, Y, Z;
  23. KeyValue = 0xFF; // 初始化KeyValue为0xFF,即无键按下的状态
  24. KEY_in = 0x0f; // 先对P1置数进行行扫描
  25. if (KEY_in != 0x0f) // 判断是否有键按下
  26. {
  27. Delay5ms(); // 延时,软件去干扰
  28. if (KEY_in != 0x0f) // 确认按键按下
  29. {
  30. X = KEY_in; // 保存行扫描时有键按下时状态
  31. KEY_in = 0xf0; // 列扫描
  32. Y = KEY_in; // 保存列扫描时有键按下时状态
  33. Z = X | Y; // 取出键值
  34. // 根据取出的键值判断是哪一个键被按下
  35. switch (Z)
  36. {
  37. case 0xee: KeyValue = 1; break;
  38. case 0xde: KeyValue = 2; break;
  39. case 0xbe: KeyValue = 3; break;
  40. case 0x7e: KeyValue = 4; break;
  41. case 0xed: KeyValue = 5; break;
  42. case 0xdd: KeyValue = 6; break;
  43. case 0xbd: KeyValue = 7; break;
  44. case 0x7d: KeyValue = 8; break;
  45. case 0xeb: KeyValue = 9; break;
  46. case 0xdb: KeyValue = 10; break;
  47. case 0xbb: KeyValue = 11; break;
  48. case 0x7b: KeyValue = 12; break;
  49. case 0xe7: KeyValue = 13; break;
  50. case 0xd7: KeyValue = 14; break;
  51. case 0xb7: KeyValue = 15; break;
  52. case 0x77: KeyValue = 16; break;
  53. }
  54. if(KeyValue==1)
  55. Relay=!Relay;
  56. else if(KeyValue==2)
  57. Buzzer=!Buzzer;
  58. }
  59. }
  60. }
  61. int main()
  62. {
  63. while(1)
  64. {
  65. Key_scan();
  66. }
  67. }

结果:

按下S1按键,继电器工作;按下S2按键,蜂鸣器工作;

定时器0的使用

电路连接情况

J12与P1导线相连;

代码

  1. #include <STC89C5xRC.H>
  2. sbit D11 = P1^0;
  3. sbit D13 = P1^2;
  4. sbit D15 = P1^4;
  5. unsigned int count_led1;
  6. unsigned int count_led3;
  7. unsigned int count_led5;
  8. void Timer0Init(void) //1毫秒@11.0592MHz
  9. {
  10. AUXR &= 0x7F; //定时器时钟12T模式
  11. TMOD &= 0xF0; //设置定时器模式
  12. TL0 = 0x66; //设置定时初值
  13. TH0 = 0xFC; //设置定时初值
  14. TF0 = 0; //清除TF0标志
  15. TR0 = 1; //定时器0开始计时
  16. ET0=1;
  17. EA=1;
  18. }
  19. int main()
  20. {
  21. Timer0Init();
  22. P1=0X00;
  23. while(1)
  24. {
  25. }
  26. }
  27. void timer0() interrupt 1
  28. {
  29. count_led1++;
  30. count_led3++;
  31. count_led5++;
  32. if(count_led1==100)
  33. {
  34. D11=!D11;
  35. count_led1=0;
  36. }
  37. if(count_led3==200)
  38. {
  39. D13=!D13;
  40. count_led3=0;
  41. }
  42. if(count_led5==400)
  43. {
  44. D15=!D15;
  45. count_led5=0;
  46. }
  47. }

结果

定时器每1ms执行一次;

count_led1加到100,LED1电平取反;count_led3加到200,LED3电平取反;.......。。。。

定时器1的使用

电路连接情况

同定时器0相同,连接led灯;

代码

  1. #include <STC89C5xRC.H>
  2. sbit D11 = P1^0;
  3. sbit D13 = P1^2;
  4. sbit D15 = P1^4;
  5. sbit D17 = P1^6;
  6. sbit D18 = P1^7;
  7. unsigned int count_led1;
  8. unsigned int count_led3;
  9. unsigned int count_led5;
  10. unsigned int count_led7,count_led8;
  11. void Timer0Init(void) //1毫秒@11.0592MHz
  12. {
  13. AUXR |= 0x80; //定时器时钟1T模式
  14. TMOD &= 0xF0; //设置定时器模式
  15. TL0 = 0xCD; //设置定时初值
  16. TH0 = 0xD4; //设置定时初值
  17. TF0 = 0; //清除TF0标志
  18. TR0 = 1; //定时器0开始计时
  19. ET0=1;
  20. EA=1;
  21. }
  22. void Timer1Init(void) //2毫秒@11.0592MHz
  23. {
  24. AUXR |= 0x40; //定时器时钟1T模式
  25. TMOD &= 0x0F; //设置定时器模式
  26. TL1 = 0x9A; //设置定时初值
  27. TH1 = 0xA9; //设置定时初值
  28. TF1 = 0; //清除TF1标志
  29. TR1 = 1; //定时器1开始计时
  30. ET1=1;
  31. EA=1;
  32. }
  33. int main()
  34. {
  35. Timer0Init();
  36. Timer1Init();
  37. P1=0X00;
  38. while(1)
  39. {
  40. }
  41. }
  42. void timer0() interrupt 1
  43. {
  44. count_led1++;
  45. count_led3++;
  46. count_led5++;
  47. if(count_led1==200)
  48. {
  49. D11=!D11;
  50. count_led1=0;
  51. }
  52. if(count_led3==400)
  53. {
  54. D13=!D13;
  55. count_led3=0;
  56. }
  57. if(count_led5==800)
  58. {
  59. D15=!D15;
  60. count_led5=0;
  61. }
  62. }
  63. void timer1() interrupt 3
  64. {
  65. count_led7++;
  66. count_led8++;
  67. if(count_led7==100)
  68. {
  69. D17=!D17;
  70. count_led7=0;
  71. }
  72. if(count_led8==200)
  73. {
  74. D18=!D18;
  75. count_led8=0;
  76. }
  77. }

结果:

LED闪烁。

中断0的使用

电路连接情况

数码管动态显示连接P1;中断功能INT0引脚P23接K1(JP5的8);

代码

  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define SMG_display P1
  4. #define KEY_in P0
  5. sbit LSA = P2^2; // 控制位选的IO
  6. sbit LSB = P2^3;
  7. sbit LSC = P2^4;
  8. unsigned char SMG_buff[8]={17,17,17,17,17,17,17,17};
  9. unsigned char code SMG_code[18] = { // 共阴编码 (高电平熄灭、低电平点亮)
  10. 0x3f, 0x06, 0x5b, 0x4f , 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, //0-9
  11. 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0xff, 0x00}; //
  12. unsigned char count;
  13. void Display()
  14. {
  15. unsigned char i;
  16. unsigned int j;
  17. for (i = 0; i < 8; i++)
  18. {
  19. switch (i)
  20. {
  21. case 0: LSA=0; LSB=0; LSC=0; break; // 选择第1个数码管
  22. case 1: LSA=1; LSB=0; LSC=0; break; // 选择第2个数码管
  23. case 2: LSA=0; LSB=1; LSC=0; break; // 选择第3个数码管
  24. case 3: LSA=1; LSB=1; LSC=0; break; // 选择第4个数码管
  25. case 4: LSA=0; LSB=0; LSC=1; break; // 选择第5个数码管
  26. case 5: LSA=1; LSB=0; LSC=1; break; // 选择第6个数码管
  27. case 6: LSA=0; LSB=1; LSC=1; break; // 选择第5个数码管
  28. case 7: LSA=1; LSB=1; LSC=1; break; // 选择第6个数码管
  29. }
  30. SMG_display = SMG_code[SMG_buff[i]]; // 显示对应数码管的值
  31. j = 200; // 延长数码管显示的持续时间
  32. while (j--);
  33. SMG_display = 0x00; // 关闭当前数码管,为下一个数码管显示做准备
  34. }
  35. }
  36. void Delay5ms() //@11.0592MHz
  37. {
  38. unsigned char i, j;
  39. _nop_();
  40. _nop_();
  41. i = 54;
  42. j = 198;
  43. do
  44. {
  45. while (--j);
  46. } while (--i);
  47. }
  48. void INT0_Init(void)
  49. {
  50. IT0 = 1; //设置下降沿触发中断
  51. EX0 = 1; //使能外部中断0
  52. EA = 1; //使能全局中断
  53. }
  54. int main()
  55. {
  56. INT0_Init();
  57. while(1)
  58. {
  59. SMG_buff[0] = count/100;
  60. SMG_buff[1] = count%100/10;
  61. SMG_buff[2] = count%10;
  62. Display();
  63. }
  64. }
  65. void ExInt0() interrupt 0
  66. {
  67. if(P32 == 0)
  68. {
  69. Delay5ms();
  70. if(P32 == 0)
  71. {
  72. count++;
  73. }
  74. }
  75. }

结果

K1按下,数码管显示的数值为检测到中断0成功识别到连续两次,P32引脚电平被拉低的次数。

8*8点阵

电路连接情况

74HC595移位数据:P595 A连接J12:用于控制位选。控制DPa,DPb......电平。

P0引脚接 J19 (绿色灯)或 J20 (红色灯)用于控制段选。显示一行(列)的八个灯亮灭。

代码

  1. #include <STC12C5A60S2.H>
  2. sbit LSA = P2^2; // 控制位选的IO
  3. sbit LSB = P2^3;
  4. sbit LSC = P2^4;
  5. sbit SER=P3^4;
  6. sbit RCK=P3^5;
  7. sbit SRCLK=P3^6;
  8. unsigned char LED[]={0x00,0x18,0x3C,0x1E,0x0F,0x1E,0x3C,0x18};
  9. void Delay1ms() //@11.0592MHz
  10. {
  11. unsigned char i, j;
  12. i = 2;
  13. j = 199;
  14. do
  15. {
  16. while (--j);
  17. } while (--i);
  18. }
  19. void MatrixLED_Init(void)
  20. {
  21. RCK=0;
  22. SRCLK=0;
  23. }
  24. void MatrixLED_Show(unsigned char Column,unsigned char Date)
  25. {
  26. unsigned char i;
  27. for(i=0;i<8;i++)
  28. {
  29. SER=Date&(0x80>>i);
  30. SRCLK=1;
  31. SRCLK=0;
  32. }
  33. RCK=1;
  34. RCK=0;
  35. P0=~(0x80>>Column);
  36. Delay1ms();
  37. }
  38. void Display()
  39. {
  40. unsigned char i;
  41. unsigned int j;
  42. for (i = 0; i < 8; i++)
  43. {
  44. switch (i)
  45. {
  46. case 0: LSA=0; LSB=0; LSC=0; break; // 选择第1个数码管
  47. case 1: LSA=1; LSB=0; LSC=0; break; // 选择第2个数码管
  48. case 2: LSA=0; LSB=1; LSC=0; break; // 选择第3个数码管
  49. case 3: LSA=1; LSB=1; LSC=0; break; // 选择第4个数码管
  50. case 4: LSA=0; LSB=0; LSC=1; break; // 选择第5个数码管
  51. case 5: LSA=1; LSB=0; LSC=1; break; // 选择第6个数码管
  52. case 6: LSA=0; LSB=1; LSC=1; break; // 选择第5个数码管
  53. case 7: LSA=1; LSB=1; LSC=1; break; // 选择第6个数码管
  54. }
  55. MatrixLED_Show(i,LED[i]);
  56. j = 100; // 延长数码管显示的持续时间
  57. while (j--);
  58. P0=0xFF;
  59. }
  60. }
  61. void main()
  62. {
  63. MatrixLED_Init();
  64. while(1)
  65. {
  66. Display();
  67. }
  68. }

结果

显示内容位心形图案。

结语

以上代码为89C52环境创建的项目代码,但本人开发板单片机型号为STC12C5A60S2,

测试过程中发现延时、定时器设定的理论时间 与 实物显示时间长短反应不一致。但可运行。

故基础部分再次结束。

我将再下一篇用STC12C5A60S2单片机芯片。

继续书写优化代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/531289
推荐阅读
相关标签
  

闽ICP备14008679号