|
求看看哪里有问题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;
}
|
|