返回信息流前几天写了个程序,再KeilC里看得挺正常的,但下载到单片机里就不行了。今天又重新写了一个,发现好像是IO的使能端控制写在主函数里,在其他函数里调用IO好像实际上没成功,把所有函数都写在主函数里就正常了。
贴两个程序,请大家指点下,后个没写注释,跟前个原理基本上一样
这个是前两天写得错误的程序:
//就是要实现在数码管上显示一排会动的数字
#include <stdio.h>
#include <stdlib.h>
#include <Fx2.h>
#include <Fx2regs.h>
//用的是cy7c68013单片机,8051内核,输出与51有点不同,大概是IOA就是P0、IOC就是P2,通过OEA和OEC使能
//输出的是8位共阴的7段数码管,带锁存器和上拉电阻的
#define TIME0 50000
unsigned char i,j,k,m,n;
unsigned char word[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //字型控制数组
unsigned char wordbuf[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; //字位(位选)控制数组
unsigned char word_temp; //用于位移的临时变量
void display(void); //声明输出函数
void main(void)
{
OEA = 0xff; //控制端A使能
OEC = 0xff; //控制端B使能
TMOD=0x01; //时钟设置
TH0=((65536-TIME0)/256); //时钟设置
TL0=((65536-TIME0)%256); //时钟设置
TR0=1; //时钟使能
EA=1; //时钟使能
ET0=1; //时钟使能
i=0;
j=0;
n=0;
IOA=0xff;
while(1);
}
void time0_int(void) interrupt 1 using 1 //中断函数,在函数里执行显示功能
{
TH0=((65536-TIME0)/256);
TL0=((65536-TIME0)%256); //时钟复位
i++; //控制位移的标志
if(i==100) //当标志达到100时,把字型数组里的数和要显示的小数点进行位移
{
word_temp=word[0]; //实现位移
for(k=0;k<9;k++)
{
word[k]=word[k+1];
}
word[9]=word_temp;
if(n<7) n++; //实现小数点位移
else n=0;
i=0; //标志的置零
}
display(); //执行显示函数
}
void display(void) //显示函数
{
if(j==n) m=1; //在第n位上显示小数点的实现
else m=0;
IOA=word[j]+m*0x80; //输出字型,已经包括了小数点
IOC=wordbuf[j]; //控制字位的输出
if(j<7) j++; //8个数码管上循环扫描
else j=0;
}
====================================================
这个是今天写得正确的:
#include<stdio.h>
#include<stdlib.h>
#include <Fx2.h>
#include <Fx2regs.h>
#define time 1250
unsigned int i=0,m=0;
void main()
{
unsigned int k=0;
unsigned char j,n;
unsigned char word[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
OEA = 0xff;
OEC = 0xff;
TMOD=0x01;
TH0=((65536-time)/256);
TL0=((65526-time)%256);
TR0=1;
EA=1;
ET0=1;
while(1)
{
if(m==1)
{
m=0;
IOA=word[(i+j)%10]+0x80*(i==n);
IOC=~wei[7-i];
k++;
if(k==800)
{
j=(j+1)%8;
n=(n+1)%8;
k=0;
}
}
}
}
void to(void) interrupt 1 using 1
{
TH0=((65536-time)/256);
TL0=((65526-time)%256);
m=1;
i=(i+1)%8;
}
这是一条镜像帖。来源:北邮人论坛 / circuit / #10037同步于 2009/5/11
Circuit机器人发帖
这个问题不大明白
yy2651592
2009/5/11镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。