/******按下按键S4-S7,数码管分别显示键值1-4****** #include <STC15F2K60S2.H> #include "intrins.h" unsigned char code smgduan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF};//0,1,2,3,4,5,6,7,8,9 unsigned char yi,er,san,si,wu,liu,qi,ba,duan[8]; unsigned char Flag; unsigned char P30_S7,P31_S6,P32_S5,P33_S4; void Display1(); void Display2(); void Delay1ms(unsigned int ms); void Key_Scan(); void main() { P2=0XA0;P0=0X00;//关闭蜂鸣器,继电器 P2=0X80;P0=0XFF;//关闭LED灯 while(1) { Display1(); Display2(); Key_Scan(); yi=10;er=10;san=10;si=10; wu=10;liu=10;qi=10;ba=Flag; } } void Display1() { unsigned char a; for(a=0;a<8;a++) { P2=0XC0; P0=1<<a; P2=0XFF; P0=duan[a]; Delay1ms(1); } P2=0XC0; P0=0XFF;//消隐,解决最后一个数码管高亮度 P2=0XFF; P0=0XFF; } void Display2() { duan[0] = smgduan[yi]; duan[1] = smgduan[er]; duan[2] = smgduan[san]; duan[3] = smgduan[si]; duan[4] = smgduan[wu]; duan[5] = smgduan[liu]; duan[6] = smgduan[qi]; duan[7] = smgduan[ba]; } void Delay1ms(unsigned int ms) //@11.0592MHz { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11*ms; j = 190; do { while (--j); } while (--i); } void Key_Scan() { if(P30==0) { P30_S7=1; } if(P31==0) { P31_S6=1; } if(P32==0) { P32_S5=1; } if(P33==0) { P33_S4=1; } if((P30_S7==1)&&(P30==1))//S7 { Delay1ms(5); if(P30==1) { Flag=1; P30_S7=0; } } if((P31_S6==1)&&(P31==1))//S6 { Delay1ms(5); if(P31==1) { Flag=2; P31_S6=0; } } if((P32_S5==1)&&(P32==1))//S5 { Delay1ms(5); if(P32==1) { Flag=3; P32_S5=0; } } if((P33_S4==1)&&(P33==1))//S4 { Delay1ms(5); if(P33==1) { Flag=4; P33_S4=0; } } } ***/ //******数码管初始显示0,单击S4,显示值加1,单击S5数值减1,长按S6数值连续加1,长按S7数值连续减1****** #include <STC15F2K60S2.H> #include "intrins.h" unsigned char code smgduan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF};//0,1,2,3,4,5,6,7,8,9 unsigned char yi,er,san,si,wu,liu,qi,ba,duan[8]; unsigned char Flag,jia,jian; unsigned char P30_S7,P31_S6,P32_S5,P33_S4; void Display1(); void Display2(); void Delay1ms(unsigned int ms); void Key_Scan(); void GongNeng(); void main() { P2=0XA0;P0=0X00;//关闭蜂鸣器,继电器 P2=0X80;P0=0XFF;//关闭LED灯 while(1) { Display1(); Display2(); Key_Scan(); GongNeng(); yi=10;er=10;san=10;si=10; wu=10;liu=Flag/100;qi=Flag%100/10;ba=Flag%10; } } void Display1() { unsigned char a; for(a=0;a<8;a++) { P2=0XC0; P0=1<<a; P2=0XFF; P0=duan[a]; Delay1ms(1); } P2=0XC0; P0=0XFF;//消隐,解决最后一个数码管高亮度 P2=0XFF; P0=0XFF; } void Display2() { duan[0] = smgduan[yi]; duan[1] = smgduan[er]; duan[2] = smgduan[san]; duan[3] = smgduan[si]; duan[4] = smgduan[wu]; duan[5] = smgduan[liu]; duan[6] = smgduan[qi]; duan[7] = smgduan[ba]; } void Delay1ms(unsigned int ms) //@11.0592MHz { unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11*ms; j = 190; do { while (--j); } while (--i); } void Key_Scan() { if(P30==0) { P30_S7=1; } if(P31==0) { P31_S6=1; } if(P32==0) { P32_S5=1; } if(P33==0) { P33_S4=1; } if((P30_S7==1)&&(P30==1))//S7 { Delay1ms(5); if(P30==1) { P30_S7=0; } } if((P31_S6==1)&&(P31==1))//S6 { Delay1ms(5); if(P31==1) { P31_S6=0; } } if((P32_S5==1)&&(P32==1))//S5 { Delay1ms(5); if(P32==1) { jian=1; P32_S5=0; } } if((P33_S4==1)&&(P33==1))//S4 { Delay1ms(5); if(P33==1) { jia=1; P33_S4=0; } } } void GongNeng() { if((jia==1)||(P31_S6==1) ) { jia=0; Flag++; } if((jian==1)||(P30_S7==1)) { jian=0; Flag--; } if(Flag==256) { Flag=0; } }
共4条
1/1 1 跳转至页
蓝桥杯单片机竞赛训练项目--I/O口使用3
关键词: 蓝桥 单片机 竞赛
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |