普通网友 2024-03-03 10:36 采纳率: 30%
浏览 7

有关51单片机程序编码

目前我的程序在摁下按键后会立马跳转到另一个图形,松开之后又会回到第一个图形,而我一共要显示三幅图形我该怎么该(51单片机c语言编码)

#include<reg51.h>
#include<intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;

sbit key1 = P3^1;


sbit RCLK = P3^5;
sbit SRCLK = P3^6;
sbit SER = P3^4;  

u8 code led_H[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 code ledL_I[] = {0x00,0x81,0x81,0xff,0xff,0x81,0x81,0x00}; 
u8 code ledL_LOVE[] = {0x30,0x48,0x82,0x41,0x41,0x82,0x48,0x30};
u8 code ledL_U[] = {0x00,0xff,0xff,0x03,0x03,0xff,0xff,0x00};


u8 flag;

void delay(u16 i)    
{
    while(i--)
        {
        
    }
}

void HC595(u8 dat)    
{
    u8 a;
    RCLK = 0;
    SRCLK = 0;           
    for(a=0;a<8;a++)
    {
        SER = dat>>7;
        dat <<= 1;
        SRCLK = 1;
        _nop_();
        _nop_();
        SRCLK = 0;        
    }
    RCLK = 1;
    _nop_();
    _nop_();
    RCLK = 0;
}

void Int0_init() 
{
    EA = 1;
    IT0 = 1;
    EX0 = 1;
}

void main()
{    
    Int0_init();
    while(1)
        {
        u8 j;
    if (flag == 0) 
            {
    for (j = 0; j < 8; j++) 
                {
        HC595(ledL_I[j]);
        P0 = led_H[j];
        delay(100);
        HC595(0x00);
        }
      } 
            else if (flag == 1) 
            {
        for (j = 0; j < 8; j++) 
                {
        HC595(ledL_LOVE[j]);
        P0 = led_H[j];
        delay(100);
        }
      } 
            else if (flag == 2) 
                {
        for (j = 0; j < 8; j++) 
                {
        HC595(ledL_U[j]);
        P0 = led_H[j];
        delay(100);
        HC595(0x00);
        }

          }
            }
}

void INT() interrupt 0
{    
    flag = 0;    
    delay(1000);
    if(key1==0)
        {    
         flag++;
         flag = 1;
        if(flag==3)
            { 
            flag = 0;
          }
      }
}    

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2024-03-03 10:36
    关注

    技术666 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    根据你的描述,你想要在51单片机上实现按下按键后跳转到不同的图形显示,目前你已经实现了两个图形的显示。你想知道如何实现在按下按键后显示第三个图形。

    解决方案如下:

    1. 修改main函数中的if-else语句,添加第三个条件判断,当flag等于2时显示第三个图形。
    void main()
    {
        Int0_init();
        while(1)
        {
            u8 j;
            if (flag == 0)
            {
                // 显示第一个图形
            }
            else if (flag == 1)
            {
                // 显示第二个图形
            }
            else if (flag == 2)
            {
                // 显示第三个图形
            }
        }
    }
    
    1. 修改INT中断函数,在按下按键后将flag加1,并判断是否超出你要显示的图形数量,如果超出则将flag重置为0。
    void INT() interrupt 0
    {
        flag++; // 每次按下按键flag加1
        delay(1000);
        if(key1==0)
        {
            if (flag > 2)
            {
                flag = 0; // 超出图形数量时将flag重置为0
            }
        }
    }
    

    经过以上修改,你的程序将能够在按下按键后连续显示三幅图形。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月3日