在开发板上,6个数码管单独依次显示0~9的值,然后所有数码管一起同时显示0~9的值,如此往复,转这个代码我老是报错,应该怎么写呀
2条回答 默认 最新
- CSDN专家-sinJack 2022-04-16 10:12关注
參考如下:
#include "reg52.h" unsigned char code SMG_duanma[18] = { // 0 1 2 3 4 5 6 7 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, // 8 9 A B C D E F 0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e, // - . 0xbf,0x7f}; sbit HC138_A = P2^3; sbit HC138_B = P2^4; sbit HC138_C = P2^5; void Delay(unsigned int t) { while(t--); while(t--); } void InitHC138(unsigned char n)//选 Y { switch(n) { case 2://8路LED P2 = (P2 & 0x1f) | 0x80; break; case 3://继电器与蜂鸣器 P2 = (P2 & 0x1f) | 0xa0; break; case 4://数码管位选 P2 = (P2 & 0x1f) | 0xc0; break; case 5://数码管段选 P2 = (P2 & 0x1f) | 0xe0; break; } } void ShowSMG_Bit(unsigned pos, unsigned char dat)//数码管 位置、数据 { InitHC138(4); //数码管的位置 P0 = 0x01 << pos; InitHC138(5); //数码管的数据 P0 = dat; } void SMG_Static() { unsigned char i, j; for (i = 0; i < 6; i++) { for (j = 0; j < 10; j++) { ShowSMG_Bit(i,SMG_duanma[j]); Delay(60000); } } for (j = 0; j <10; j++) { InitHC138(4); //数码管的位置(全部) P0 = 0xff; InitHC138(5); //数码管的数据 P0 = SMG_duanma[j]; Delay(60000); Delay(60000); } } void main() { while(1) { SMG_Static(); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录