51单片机数码管矩阵显示
问题描述
通过点亮8段数码管的不同部位,来显示不同的数字。编写程序,在实验箱数码管上依次显示0、1、2、……9、0、1、2……
完整代码
#include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77 }; uchar code TABLE[]={ 0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; void delay() { uint n =50000;while(n-- ); } void delays() { uint n= 10000;while(n--); } main() { uchar temp,key,num,i; while(1) { P3= 0xf0; if(P3!= 0xf0) { delays(); if(P3!= 0xf0) { temp= P3; P3= 0x0f; key= temp|P3; for(i= 0;i<16;i++) if(key== KEY_TABLE[i]) { num= i;break; } P2= TABLE[num]; delay(); } } } }
模拟电路实现效果图