int i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
i = 0;
while(1)
{
SBUF=i;
while(!TI);
TI=0;
}
}
作者: zuoluo 时间: 2012-7-28 16:03
你把i定义成unsigned char 试试,以前我也遇到过这样的事情,
作者: jy_121 时间: 2012-7-28 16:33
还是一样啊
作者: duoyidu 时间: 2015-3-9 00:06
稍微改了一下程序:
我运行了一下,输入一个值,会返回一个值
#include<reg52.h>
unsigned int i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
//EA=1;
ES=0;
i = 0;
while(1)
{
if(1==RI)
{
RI=0;
SBUF=i;//i是你要输入的值
i=SBUF;
}
else if(1==TI);
TI=0;
}
}
作者: 无线hi 时间: 2022-6-17 11:02
#include <reg52.h>
typedef unsigned int u16;//对系统默认数据类型进行重定义
typedef unsigned char u8;
int i,j,N=0;
sbit dula=P2^6;
sbit wela=P2^7;
int zhhcc[8];
char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //0~f十六个数字数组
void uart_init(u8 baud)
{
TMOD|=0X20; //设置计数器工作方式 2
SCON=0X50; //设置为工作方式 1
PCON=0X80; //波特率加倍
TH1=baud; //计数器初始值设置
TL1=baud;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void delay(x)
{
int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uart_init(0XFA);//波特率为 9600
while(1) //进入显示循环
{ while(1)
{ P0=0xfe; wela=1; wela=0;
P0=zhhcc[0];dula=1;dula=0; //显示第一位
P0=0xff;
delay(5);
if(N==1)
break;
P0=0xfd; wela=1; wela=0;
P0=zhhcc[1];dula=1;dula=0;P0=0xff; //显示第二位
delay(5);
if(N==2)
break;
P0=0xfb; wela=1; wela=0;
P0=zhhcc[2];dula=1;dula=0;P0=0xff; //显示第三位
delay(5);
if(N==3)
break;
P0=0xf7; wela=1; wela=0;
;
P0=zhhcc[3];dula=1;dula=0; P0=0xff; //显示第四位
delay(5);
if(N==4)
break;
P0=0xef; wela=1; wela=0;
P0=zhhcc[4];dula=1;dula=0;P0=0xff; //显示第五位
delay(10);
if(N==5)
break;
P0=0xdf; wela=1; wela=0;
P0=zhhcc[5];dula=1;dula=0;P0=0xff; //显示第六位
delay(5);
if(N==6)
break;
P0=0xbf; wela=1; wela=0;
P0=zhhcc[6];dula=1;dula=0;P0=0xff; //显示第七位
delay(5);
if(N==7)
break;
P0=0x7f; wela=1; wela=0;
P0=zhhcc[7];dula=1;dula=0;P0=0xff; //显示第八位
delay(5);
if(N==8){N=0;};
break;
}
}
}
void uart() interrupt 4 //串口通信中断函数
{
u8 rec_data;
if(RI==1)
{
RI = 0; //清除接收中断标志位
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |