这是我写的代码,仿真时如图所示,请问错了哪里啊?#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar flag,wan,qian,bai,shi,ge;uint a,shu;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void init();void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge);void main(){ init(); while (1) { if(RI==1) { while (!RI); RI = 0; shu = SBUF; } wan = shu / 10000; qian = shu % 10000 /1000; bai = shu % 1000 /100; shi = shu % 100 / 10; ge = shu % 10; display(wan,qian,bai,shi,ge); }}void init(){ TMOD = 0x20; TH1 = 0xf3; TL1 = 0xf3; TR1 = 1; SCON = 0x50; EA = 1; ES = 1;}void display(uchar wan,uchar qian,uchar bai,uchar shi,uchar ge){ uchar i; P2 = 0x01; P0 = table[wan]; i = 10; while (i--); P0 = 0x00; P2 = 0x02; P0 = table[qian]; i = 10; while (i--); P0 = 0x00; P2 = 0x04; P0 = table[bai]; i = 10; while (i--); P0 = 0x00; P2 = 0x08; P0 = table[shi]; i = 10; while (i--); P0 = 0x00; P2 = 0x10; P0 = table[ge]; i = 10; while (i--); P0 = 0x00;}
哪里不对啊?
我加你了,请确认下,谢谢!
题目:以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上...
以16进制发送一个0-65536之间的任一数:这题目本身是有问题的,因为超过255的数,要用两个字节了,就是需要发送两次。而你程序只接收一次,shu = SBUF;这是不可能的。发送两次,要分高8位和低8位,这还要确定是先发高8位,还是先发低8位。下一个问题是,看你的仿真图,是用虚拟终端发的,对...
请高手帮我解决一个51单片机程序 ,怎么达不到不到题目的要求
2、main()中:应接收2次后再调用init(),可以设定一个计数变量记录接收次数,计数到2后归0;3、单独再设一个uint变量或通过参数传递方式将两次计数得到的16位二进制数在init()函数中完成获取万千百十个的各位数字的运算。如果原来上位机连续发送0x55,0xAA而你的显示为170(0x55对应的85显示太快,可...
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态...
while(!TI);TI=0;ES=1;……
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态...
数码管转换的时候是没错的 估计是波特率的问题 12MHz晶振可以使用4800bsp的波特率 PCON=0x80;TH1 = 0xF3;TL1 = TH1;
单片机串口通信问题,请求大侠帮忙!
以16进制发送一个0~65536之间的任意数,...--- 标准的串口,只能传输0~255之间的数。要想传送多字节的数据,就需要多次传送。这就必须制定通信协议。发送方,先向对方呼叫,待收到正确的回音后;再向对方发送“数据的字节数”;再向对方连续发送数据字节串,对方收到,存放到一个缓存空间;发送方...
单片机课程设计 题目:模拟电压显示器
我这有个数字电压表啊 1. 实验任务 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。2. 电路原理图 (图)见插图 3. 系统板上硬件连线 a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH...
...数码管显示电路。 设计要求:每隔2S显示数字加1,显示初值
shu=0; } } 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 ...
现在的病毒和木马,有什么区别?
1、病毒是当已感染的软件运行时,这些恶性程序向计算机软件添加代码,修改程序的工作方式,从而获取计算机的控制权。2、木马是指未经用户同意进行非授权操作的一种恶意程序。它们可能删除硬盘上的数据,使系统瘫痪,盗取用户资料等。木马程序不能独立侵入计算机,而是要依靠黑客来进行传播,它们常常被伪装成“...
求高手修改单片机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...
单片机上机考试,河北工业大学 大三
B.8051单片机中,唯一一个用户可使用的16位寄存器是D。DPTR 。B.8051的程序计数器PC为16位计数器,其寻址范围是D。64K 。B.把16进制数FFH转换成BCD码,结果存放在20H 22H单元(1) B #64H (2) B B (3) D #10H B.把内部RAM中起始地址为BLK1的数据块传送到外部RAM以BLK2为起始地址的区域,直到遇到“#...