蓝桥杯单片机学习过程记录(三)静态数码管
单片机静态数码管
数码管0-9显示
//静态数码管0-9显示,led1亮
#include<STC15F2K60S2.H>
unsigned int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0XBF};
unsigned int i;
void delayms(int ms);
void main(void){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
//数码管初始化,打开第一个数码管
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
for(i=0;i<11;i++){
P0=seg[i];
delayms(200);
}
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
P01=0;
while(1);
}
void delayms(int ms){
int q,w;
for(q=0;q<ms;q++){
for(w=845;w>0;w--);
}
}
按键+数码管显示
//按键+数码管显示
#include<STC15F2K60S2.H>
unsigned int tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0XBF};
unsigned int i,num;
void delayms(int ms);
void key_scan(void);
void main(void){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
//数码管初始化,打开第一个数码管
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
while(1){
key_scan();
}
}
void delayms(int ms){
int q,w;
for(q=0;q<ms;q++){
for(w=845;w>0;w--);
}
}
void key_scan(void){
//s7为手动0-9显示
if(P30==0){
delayms(5);
if(P30==0){
num++;
P0=tab[num];
if(num==10)
num=0;
}
//等待抬起
while(!P30);
}
//s6为自动0-9显示
else if(P31==0){
delayms(5);
if(P31==0){
for(i=0;i<11;i++){
P0=tab[i];
delayms(200);
}
}
while(!P31);
}
//s5显示C
else if(P32==0){
delayms(5);
if(P32==0)
P0=0XC6;
while(!P32);
}
//s4关闭数码管
else if(P33==0){
delayms(5);
if(P33==0)
P0=0XFF;
while(!P33);
}
}
00-99数码管计数
//99计数后打开led流水灯
#include<STC15F2K60S2.H>
unsigned int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0XBF};
unsigned int i,j,m,led;
void delayms(int ms);
void main(void){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
//数码管初始化,打开2个数码管
P2=0XC0;P0=0X03;P2=0XFF;P0=0XFF;
//00-99显示
while(j<10){
for(m=0;m<10;m++){
P2=0XC0;P0=0X02;P2=0XFF;P0=0XFF;
P0=seg[i];
delayms(15);
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
P0=seg[j];
delayms(15);
}
i++;
if(i==10){
i=0;
j++;
}
}
//数码管关闭
P2=0XC0;P0=0X03;P2=0XFF;P0=0XFF;
P0=0XFF;
//LED流水
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
for(led=0;led<9;led++){
P0=~(0X01<<led);
delayms(200);
}
//LED全灭
P0=0XFF;
delayms(10);
while(1);
}
//延时
void delayms(int ms){
int q,w;
for(q=0;q<ms;q++){
for(w=845;w>0;w--);
}
}