代码如下 :
#include <STC15.H>
#include <intrins.H>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar time ,temp,temp1=0;
//int SS=0,MS=0;
//int time=2;
//int m=0,n=0;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数字编码 0.1.2.3.4....9
uchar yi,er,san,si;
uint num;
uchar data_L, data_H;
uchar data_0, b;
uchar flag=0;
sbit P0_0=P0^0;
sbit k3 = P3^2;
sbit k4 = P3^3;
/********************************************************************
* 名称 : Delay()
* 功能 : 延时
* 输入 : i
* 输出 : 无
***********************************************************************/
void delay(uchar i) //延时函数
{
uint j,k;
for(j=i;j>0;j--)
for(k=500;k>0;k--);
}
/********************************************************************
* 名称 : display()
* 功能 : 数码管显示函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
/*********************************************************************
串口初始化
*************************************************************/
void UART_init(void)
{
//?????????1
TMOD = 0x20; // 0010 0000 ???1?????2(8???????)
TH1 = 0xFD; // ???:9600 /11.0592MHZ
TL1 = 0xFD; // ???:9600 /11.0592MHZ
TR1 = 1;
//?????????
AUXR = 0x00; // ???,?????1????????,S1ST2=0
SCON = 0x50; // 8位数据,可变波特率
TI=1; // ???,??printf?????????
}
void display(uchar yi,uchar er,uchar san,uchar si) //显示函数
{
P2=table[yi];
P41 = 0;
delay(5);
P41 = 1;
P2=table[er];
P42 = 0;
delay(5);
P42 = 1;
P2=table[san];
P44 = 0;
delay(5);
P44 = 1;
P2=table[si];
P45 = 0;
delay(5);
P45 = 1;
}
void printf_String(void)
{ //int a=0;int b=0;int c=0;int d=0;
char strTempA[5];
char strTempB[5];
char strTempC[5];
char strTempD[5];
//int b;
sprintf(strTempA,"%d",temp1);/*;sprintf(strTempB,"%d",b);sprintf(strTempC,"%d",c);sprintf(strTempD,"%d",d);*/
//char buf = a;
// char *p = buf;
printf ("开始时间:%s \n",strTempA/*,strTempB,strTempC,strTempD*/);
//SBUF=0x88;
//??:String Test String is at address i:0022
}
/********************************************************************
* 名称 : main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main(void)
{
P0M0=0X00;P0M1=0X00; //端口模式
delay(5);
P1M0=0X00;P1M1=0X00;
delay(5);
P2M0=0X00;P2M1=0X00;
P3M0=0X00;P3M1=0X00;
P4M0=0X00;P4M1=0X00;
//TMOD=0x01;
TH0=0x0D8;
TL0=0x0F0;
IT0=1; // ????????
EX0=1; // ?????0
// ????
IT1=1;//???????(???)
EX1=1;//??INT0?????
EA=1;
ET0=1;
TI=1;
//TR0=1;
while(1)
{
display(yi,er,temp1,temp);
}
/********外中断0***************/
}
void init1(void) interrupt 0
{ UART_init();
if(k3==0){
TR0=1;
printf_String() ;
}
/**************外中断1*******/
}
void init2(void) interrupt 2
{
if(k4==0){
TR0=0;
}
}
/***********************
定时器T0中断
*************************/
void TIME0(void) interrupt 1
{
//TH0=0xee;
//TL0=0x00; TH0=(65535-5100)/256;// ?? 5 ??????
TH0 = 0x0D8;
TL0 = 0x0F0;//??10ms
time++;
if(time==50)//0.5??
{
time=0;
temp++;
if(temp==10)
{
temp=0;
temp1=temp1+1;
}
}
}
想请教一下为什么会出现这种情况呀,不是应该显示 1 的吗?为什么会显示256?另外还想请教一下有没有简单的方法让数码管上的数字显示到串口助手上面?
|