/******按下按键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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金
