首先为什么我的最后一位显示的比较亮,其次每次复位时显示255,最后怎么显示255以上的数字
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar flag;
uint num;
void display(uchar,uchar,uchar,uchar,uchar);
void delay(uchar);
main()
{
EA=1;
ES=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
while(1)
{
display(num/10000,num%10000/1000,num%10000%1000/100,num%10000%1000%100/10,num%10);
if(flag==1)
{
ES=0;
flag=0;
SBUF=num;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
num=SBUF;
RI=0;
flag=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[wan];
dula=0;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[qian];
dula=0;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0xef;
wela=0;
}
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态...
估计是波特率的问题 12MHz晶振可以使用4800bsp的波特率 PCON=0x80;TH1 = 0xF3;TL1 = TH1;
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态...
while(!TI);TI=0;ES=1;……
题目:以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上...
以16进制发送一个0-65536之间的任一数:这题目本身是有问题的,因为超过255的数,要用两个字节了,就是需要发送两次。而你程序只接收一次,shu = SBUF;这是不可能的。发送两次,要分高8位和低8位,这还要确定是先发高8位,还是先发低8位。下一个问题是,看你的仿真图,是用虚拟终端发的,对...
以16进制发送一个0-255之间的任一数,当单片机收到后在数码管上动态显示...
0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};\/\/共阳级数码管码表0-9uchar dat,bai,shi,ge,scan;void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}void uart() interrupt 4{if(RI) { RI=0;
单片机串口通信问题,请求大侠帮忙!
以16进制发送一个0~65536之间的任意数,...--- 标准的串口,只能传输0~255之间的数。要想传送多字节的数据,就需要多次传送。这就必须制定通信协议。发送方,先向对方呼叫,待收到正确的回音后;再向对方发送“数据的字节数”;再向对方连续发送数据字节串,对方收到,存放到一个缓存空间;发送方...
请高手帮我解决一个51单片机程序 ,怎么达不到不到题目的要求
2、main()中:应接收2次后再调用init(),可以设定一个计数变量记录接收次数,计数到2后归0;3、单独再设一个uint变量或通过参数传递方式将两次计数得到的16位二进制数在init()函数中完成获取万千百十个的各位数字的运算。如果原来上位机连续发送0x55,0xAA而你的显示为170(0x55对应的85显示太快,...
为什么51单片机定时器计数值取出来之后会比初值还小
有两种可能会造成这种情况:1、定时计数器启动后会从初值开始每个机器周期+1,也就是从49806开始每个机器周期+1,等记到65535(0xFFFF)后下一个周期就会清零,即从0000H开始计数。所以工作方式1在定时中断响应函数中一开始都要重装初值,否则就从0开始了。你说的情况可能定时中断函数中没有重装初值或者...
现在的病毒和木马,有什么区别?
病毒与木马的区别 :1、病毒是当已感染的软件运行时,这些恶性程序向计算机软件添加代码,修改程序的工作方式,从而获取计算机的控制权。2、木马是指未经用户同意进行非授权操作的一种恶意程序。它们可能删除硬盘上的数据,使系统瘫痪,盗取用户资料等。木马程序不能独立侵入计算机,而是要依靠黑客来进行传播,...
...数码管显示电路。 设计要求:每隔2S显示数字加1,显示初值
void time1(void) interrupt 3 { TH1=(65536-5000)\/256; TL1=(65536-5000)%256; display(); } void init() { TMOD=0x11; EA=1; ET0=1; ET1=1; TR1=1; TR0=1; } main() { init(); while(1) { conv(shu); } } 本回答由提问者推荐 举报| 答案纠错 | 评论(4) 1 0 yying0907 ...
求高手修改单片机C语言程序:0~59秒计数器;1个独立按键控制,2个数码...
TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;P0=table[0];P2=table[0];while(1){ while(!KEY){ delay(10);if(KEY){ flag++;{ if(flag==1)TR0=0;if(flag==2){ TR0=1;aa=0;num=0;num1=0;flag=0;TR0=1;} } } } if(aa==20){ aa=0;num++;if(num==10){ num=0...