/******按下按键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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
我要赚赏金
