c51编程-开机时,显示0,按下启动按钮后松开,数码管从0到9自动循环1次,停在9,等待下一次按启动按钮
推荐回答
这是最基本的编程了,给你个参考的代码: unsigned char Number[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F 数码管 //16进制: unsinged char code led[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,};unsigned char Char[]={0xF7,0xFc,0xb9,0xde,0xf9,0xf1,0xB8}; //A., b., C.,d.,E.,F.,L.long int num=0;int hnum=0,lnum=0,temp1=0,temp2=0;void SystemInit(void){ PCA0MD &= ~0x40; // 关闭 WDT PCA0MD = 0x00;}void SysClkInit(void)//配置系统时钟{ OSCICN=0X83;//0X82-SYSCLK为内部时钟2分频 }void Port_IO_Init() { P0MDOUT=0xff;//0X00;P0MDIN=0xff;//P1MDOUT=0Xff;P2MDOUT|=0Xff;P0SKIP=0X3C; XBR0 = 0x02; //0x04 XBR1 = 0x40;P0 = 0X00;//ESPI0=1; EA=1; IE=0XD0; }void delay(int msec){int i,j;for(i=0;i<msec;i++)for(j=0;j<256*10;j++); }void init_device(){ SysClkInit(); SystemInit(); InitSPI(); Port_IO_Init(); }//------------------------------------void DisplayCmd(unsigned char cmd,unsigned char axleNum){if(cmd>6)cmd=0;//if(axleNum>14)axlenum=0;P2=0x04;P1=Char[cmd];delay(1);P2=0x01;P1=Number[(axleNum/0x10)];delay(1);P2=0x02;P1=Number[axleNum&0x0f];delay(1);}void DisplayData(long ldata){long lemp=ldata;unsigned char port2=0x80;int i,len,index=0;if(ldata<0){ lemp=0-ldata; ldata=lemp; P2=0x08; P1=0X40; delay(1);}if(ldata<10){index=1;}else if(ldata<100){index=2;}else if(ldata<1000){index=3;}else if(ldata<10000){index=4;}else if(ldata<100000){index=5;}else if(ldata<1000000){index=6;}else if(ldata<10000000){index=7;}else{index=8;}for(i=0;i<index;i++){len=lemp%10;lemp/=10;P2=port2;port2=port2>>1;P1=Number[len];delay(1);}}//------------------------------------void main(){ int i,j,k=1; init_device(); for(i=0;i<900;i++) {DisplayCmd(k,k*0x10+k);DisplayData(k*1111); j++; if((j%100)==0)k++;}Command=1;AxleNum=0x67;SPIData=12345;while(1){ReceiverData(); DisplayCmd(Command,AxleNum);DisplayData(SPIData);}}