找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1735|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机移植到STM32数码管滚动显示错误

[复制链接]
跳转到指定楼层
楼主
ID:979469 发表于 2022-8-23 19:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
求看看哪里有问题111是51程序可以正常运行
改成32不知道哪里有问题不显示

单片机源程序如下:
#include <STC89C5xRC.H>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int


sbit duan=P2^6;
sbit wei=P2^7;
uchar code tab[18]={0x06,0x6f,0x7f,0x06,0x06,0x06,0x6d,0x66,0x5b,0x06,0x5b,0x6f,0x00,0x00,0x00,0x00,0x00,0x00};
//共阴极数码管段码表
uchar idata dis_buf[6]={17,17,17,17,17,17};
//显示缓冲区数据(十进制)
void delayms(uint i) //延时1ms函数
{
                uint j;
        for(;i>0;i--)
for(j=120;j>0;j--)
{;}
}




void main() //主函数
{
        uchar k,m,n,bitcode,segcode;
        while(1)
                {
                        for(n=0;n<17;n++)
                        {
                                dis_buf[0]=dis_buf[1]; //数据移动
                                dis_buf[1]=dis_buf[2];
                                dis_buf[2]=dis_buf[3];
                                dis_buf[3]=dis_buf[4];
                                dis_buf[4]=dis_buf[5];
                                dis_buf[5]=n;
                                for(m=0;m<100;m++) //100次扫描,大约600ms
                                {
                                        bitcode=0xfe; //起始位码
                                        for(k=0;k<6;k++)
                                        {
                                                P0=0xff; //消影
                                                wei=1;
                                                wei=0;
                                                segcode=dis_buf[k]; //取数据
                                                P0=tab[segcode]; //送段码
                                                duan=1;
                                                duan=0;
                                                P0=bitcode; //送位码
                                                wei=1;
                                                wei=0;
                                                delayms(1);
                                                bitcode=_crol_(bitcode,1); //更新位码,准备显示下一位
                                        }
        }
     }
  }
}


下面是所改不显示仿真图就换个主控端口


#include "stm32f10x.h"
#include "smg.h"
#include "Delay.h"
//uint16_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uint16_t wei[]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df};

u8 tab[18]={0x06,0x6f,0x7f,0x06,0x06,0x06,0x6d,0x66,0x5b,0x06,0x5b,0x6f,0x00,0x00,0x00,0x00,0x00,0x00};
//共阴极数码管段码表
u8 dis_buf[6]={17,17,17,17,17,17};
//显示缓冲区数据(十进制)
uint8_t i;
int main(void)
{
        u8 k,m,n,bitcode,segcode;
SMG_Init();
while(1)
{
         for(n=0;n<17;n++)
                        {
                                dis_buf[0]=dis_buf[1]; //数据移动
                                dis_buf[1]=dis_buf[2];
                                dis_buf[2]=dis_buf[3];
                                dis_buf[3]=dis_buf[4];
                                dis_buf[4]=dis_buf[5];
                                dis_buf[5]=n;
        for(m=0;m<100;m++) //100次扫描,大约600ms
                {
                        bitcode=0x0fe; //起始位码
  for(i=0;i<6;i++)
   {
                 GPIO_Write(GPIOC,0x0ff);
                 
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);
                  Delay(100);
                 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
                 
                 segcode=dis_buf[ i];
                  
                 GPIO_Write(GPIOC,tab[segcode]); //送段码
                 
                 GPIO_SetBits(GPIOB,GPIO_Pin_0);
                  Delay(100);
                 GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                 
                 
                 GPIO_Write(GPIOC,bitcode); //送位码
                 GPIO_SetBits(GPIOB,GPIO_Pin_1);
                 Delay(100);
                 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//    GPIO_Write(GPIOB,wei[i-1]);
//    GPIO_Write(GPIOC,table[ i]);
      Delay(100);


                         bitcode=My_crol_(bitcode,1); //更新位码,准备显示下一位
                  Delay(50);
    }
         
   }
  }
}
}


#include"stm32f10x.h"
#include"smg.h"
void SMG_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
        GPIO_InitStructure.GPIO_Pin = 0x00ff;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = 0x0003;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
}
u32 My_crol_(u32 data,u8 num)
{
        u8 i=0;
        u32 temp1=0;
        u32 temp2=0;
        u32 rtn_data;
        
        temp1=data;
        
        for(i=0;i<num;i++)
        {
                temp1=temp1<<1;
                temp2=temp2<<1;        
    if(temp1>0x0fffffff)
          {
          temp2+=1;
          }
        
         
        }
  rtn_data=temp1+temp2;
        return rtn_data;

}

111.zip

306.23 KB, 下载次数: 7

51单片机程序

管动态扫描.7z

299.25 KB, 下载次数: 11

32单片机

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

地板
ID:824490 发表于 2022-9-1 16:47 | 只看该作者
把仿真工程和代码一起发上来,将会有更多来帮你。
回复

使用道具 举报

板凳
ID:301191 发表于 2022-9-1 13:42 | 只看该作者
顶一下
回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表