1. 程式人生 > >51微控制器:8位數碼管動態顯示,從12345678開始,每次按S1鍵加1

51微控制器:8位數碼管動態顯示,從12345678開始,每次按S1鍵加1

原始碼

這裡寫圖片描述

#include <reg52.h>
#include <stdlib.h>
#define uint unsigned long             
#define uchar unsigned char 
sbit N1 = P1^0; 
sbit N2 = P1^1;
sbit N3 = P1^2;
sbit N4 = P1^3;
sbit N5 = P1^4;
sbit N6 = P1^5;
sbit N7 = P1^6;
sbit N8 = P1^7;

sbit S1 = P3^7;
uchar code table[]={0xc0,0xf9,0xa4
,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~916進位制共陽極編碼 uint num; void delayms(uint xms) //延時函式 { uint i,j; for(i=xms;i>0;i--) for(j=10;j>0;j--); } void display(unsigned long num) { N1=0; P0=table[(num%100000000)/10000000]; delayms(1); P0=0XFF; N1=1
; N2=0; P0=table[(num%10000000)/1000000]; delayms(1); P0=0XFF; N2=1; N3=0; P0=table[(num%1000000)/100000]; delayms(1); P0=0XFF; N3=1; N4=0; P0=table[(num%100000)/10000]; delayms(1
); P0=0XFF; N4=1; N5=0; P0=table[(num%10000)/1000]; delayms(1); P0=0XFF; N5=1; N6=0; P0=table[(num%1000)/100]; delayms(1); P0=0XFF; N6=1; N7=0; P0=table[(num%100)/10]; delayms(1); P0=0XFF; N7=1; N8=0; P0=table[num%10]; delayms(1); P0=0XFF; N8=1; } void main() { TMOD=0x01; //採用T0方式,將M1置0,M0置1,是方式一的定時器 EA=1; //外部中斷總開關 EX0=1; // 允許外部中斷0申請中斷。 num=12345678; // 初始化12345678 while(1) { while(1) { display(num); if(S1==0) //判斷是否按下 { delayms(50); if(S1==0) //再次確定 { num++; } while(!S1); //消抖 delayms(50); while(!S1); break; //跳出所在的第一個while迴圈 } } } }