/******按下按键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; }
}共2条
1/1 1 跳转至页
蓝桥杯单片机竞赛训练项目--I/O口使用3
关键词: 蓝桥 单片机 竞赛
共2条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
我要赚赏金
