/********************************************************************************************
利用数码管在最高位显示数字8,再利用外部中断系统来控制数字的左右移动
写的时候遇到了几个问题,本来是在main函数中只有一个大循环,循环中先扫描数码管然后用按键来执行中断,在显示的时候会有一个数字8正常左右移动,但总会在最高位显示一个数字8,于是就用到了两个大循环,在第一个大循环中只用来在按键按下之前扫描数码管和挑战到第二个大循环,呃呃呃,我的思维可能比较古怪
以下代码为我利用手头上的开发板(QX-MCS51)写下的小程序
********************************************************************************************/
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
sbit WE = P2^7;
sbit DU = P2^6;
sbit zy = P3^6;
sbit yy = P3^7;
sbit S2 = P3^0;
sbit S3 = P3^1;
u8 code wei[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 j;
void Delay_ms(u16 n) //毫秒级别延时函数
{
u8 j;
while(n--)
for(j=0;j<113;j++);
}
void Init() //中断初始化函数
{
EA = 1;
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
}
void SMGHS() //数码管显示函数
{
DU = 1;
P0 = 0x7f;
DU = 0;
WE = 1;
P0 = wei[j];
WE = 0;
}
void main()
{
while(1) //第一个大循环
{
SMGHS(); //扫描数码管
if(S2 == 0)
{
Delay_ms(10);
if(S2 == 0)
{
goto AA; //跳转到第二个大循环中的左移中断
while(S2 == 0);
}
}
if(S3 == 0)
{
Delay_ms(10);
if(S3 == 0)
{
goto BB; //跳转到第二个大循环中的右移中断
while(S3 == 0);
}
}
}
while(1)
{
Init();
if(S2 == 0)
{
Delay_ms(10);
if(S2 == 0)
{
AA: zy = 1;
zy = 0; //产生下降沿,进入中断0
while(S2 == 0);
}
}
if(S3 == 0)
{
Delay_ms(10);
if(S3 == 0)
{
BB: yy = 1;
yy = 0; //产生下降沿,进入中断1
while(S3 == 0);
}
}
}
}
void int0() interrupt 0
{
j++; //数码管数字左移
if(j == 8)
j=0;
SMGHS();
}
void int1() interrupt 2
{
j--; //数码管数字右移
if(j == -1)
j=7;
SMGHS();
}共4条
1/1 1 跳转至页
关于蓝桥杯训练小程序 中断控制数码管显示数字的左右移动
关键词: 蓝桥训练 程序 外部中断 数码管数字左移
共4条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取磁力计iis2mdc被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取LPS22HH气压、温度被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取STTS751温度被打赏¥17元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
我要赚赏金
