
不知道你的 #define LEN 4 有什么用,还有就是你怎么把LED[ ]输出到单片机上去的,你应该是把LED[ ]赋值给单片机的输出口吧如P0,P1(这要看你是怎样接的)什么的
我给你改了下,你看看怎么样:
#include <AT89X52H>
#include<stdioh>
void main()
{
unsigned int LED[8] = {0}; //先给第一个数赋值0,后面的都默认为0,如果不赋值不同的机器会有不同的数的吧,而且你最好养成赋初值的习惯吧
unsigned int she[4]={1,2,3,4};
unsigned int i;
unsigned int w;
unsigned int m;
unsigned int n;
for(i=0; i<4; i++ ) // i 不能等于4,因为she[]一共才有4个,最多才是she[3]
{
m=(she[i]-1)/8; //整除8
n=(she[i]-1)%8+1;//除8的余数
switch(n)
{
case 1:w=0x80;break;
case 2:w=0x40;break;
case 3:w=0x20;break;
case 4:w=0x10;break;
case 5:w=0x08;break;
case 6:w=0x04;break;
case 7:w=0x02;break;
case 8:w=0x01;break;
}
LED[m]=LED[m]+w;
}
//下面的是我在VC2010上弄的(把头文件改为C++的头文件),能看到输出是 240(0xf0),0 0 0 0 0 0 0
/ for(i=0; i!=8; i++ )
{
cout << LED[i] << endl;
}/
}
单片机更换芯片后需要根据新的芯片型号重新修改代码以适配新的硬件。以下是一些步骤:
1 了解新芯片的特性和规格,包括引脚功能、寄存器配置等信息。
2 将旧代码中的芯片相关的部分进行修改,例如修改引脚定义、寄存器配置等。可以参考新芯片的数据手册进行修改。
3 可能需要重新编写某些程序代码,例如时钟配置、中断处理等。
4 进行调试和测试,确保程序在新芯片上能够正常运行。
5 如果遇到问题,可以参考新芯片的官方资料或者论坛进行咨询。
请注意,在进行单片机芯片更换时,需要特别小心,务必按照正确的 *** 作流程进行,避免损坏硬件设备。建议在有经验的工程师的指导下进行 *** 作。
修改如下:
#include<reg52h>
sbit shuru=P1^0;
unsigned char PuZh[16] = "a";
unsigned char BuZh[16] = "b";
bit flaga=0,flagb=0;
void UsartConfiguration();
void Delay10ms(unsigned int c); //误差 0us
void main()
{
unsigned char i;
UsartConfiguration();
while(1)
{
if(shuru==0 && flaga==0)
{
for(i=0; i<16; i++)
{
SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
TR1 = 0;
ES = 0;
EA = 0;
}
flaga=1;
flagb=0;
Delay10ms(500); //延时一下再发
}
else if(shuru==1 && flagb==0)
{
for(i=0; i<16; i++)
{
SBUF = BuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
TR1 = 0;
ES = 0;
EA = 0;
}
flaga=0;
flagb=1;
Delay10ms(500); //延时一下再发
}
}
/
函 数 名 :UsartConfiguration()
函数功能 :设置串口
输 入 : 无
输 出 : 无
/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XFA; //计数器初始值设置,注意波特率是4800的
TL1=0XFA;
// ES=1; //打开接收中断
// EA=1; //打开总中断
TR1=1; //打开计数器
}
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
unsigned int i=0; //声明数据类型此句放到最上面,声明为全局变量,否则在中断中无法使用
430的中断函数在IAR中这样写,不知道你用的什么编译器
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void) //定时器A的中断函数
修改后源代码:
#include <msp430x14xh> //声明库文件
unsigned int i=0; //声明数据类型
void main(void)
{
int shi,ge,m;
unsigned char seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//共阳数码管字型码数组
WDTCTL = WDTPW + WDTHOLD; //关看门狗
P1DIR=0XFF;
P2DIR=0XFF;
P2SEL=0X00;
P1SEL=0X00;
TACTL=TASSEL0+TACLR;//aclk辅助时钟
CCTL0 = CCIE; //使能定时器A捕捉与中断功能,CCIE=0x0010
CCR0 =32768; // 设置计数器CCR0初值
TACTL |= MC0; //设置定时器工作模式为加计数到CCR0初值
while(1)//没有循环体的无限次while循环
{
shi=i/10;
ge=i%10;
P1OUT=0x80;
P2OUT=seg[ge];
for(m=0;m<1000;m++);
P1OUT=0x40;
P2OUT=seg[shi];
for(m=0;m<1000;m++);
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void) //定时器A的中断函数
{
if(i<100)
i++;
else
i=0;
}
这个要根据实际情况修改程序,如果是不同类别的比如一个是51单片机,一个是PIC单片机,那么基本上不是修改的问题,而是只能重新编写了,两者完全不搭界。如果是同类单片机,比如都是51,那么稍作修改基本上就可以。主要修改的地方是:延时程序,寄存器设置,等等。
把函数中TH1,TL1,TR1,ET1,里面的都改成0,这个是定时器0的寄存器,然后TH0,和TL0的初值也要修改;下面有初始化和中断函数了,把你亮灯的 *** 作添加进去就OK,具体看下面:
#include <reg51h>
void InitTimer0(void) //初始化定时器0
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
InitTimer0();
}
void Timer0Interrupt(void) interrupt 1 //定时器0中断程序
{
TH0 = 0x0D8;
TL0 = 0x0F0;
//add your code here!
}
以上就是关于单片机点阵程序修改全部的内容,包括:单片机点阵程序修改、单片机换芯片怎么改代码、51单片机串口发送程序修改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)