导航:首页 > 操作系统 > 单片机01234567

单片机01234567

发布时间:2023-04-20 11:45:19

‘壹’ 单片机串行不能发送数据,求指点。程序如下:

问题很简单,也很多!首先你已经开串口中断也就是ES=1,需要相应的串口中断服务程序,其次ET1不需要51定时器1方式2就是用作串口通信波特率的,最后你定义的unsigned char table [] = {"单片机串行通信"};直接这样发送你不可以的,如果需要发送衫消则汉字建议直接调用stdio标准输入输出库中的printf函数,不过需要重载,或棚你进入while(1)循环中就检测TI是否等于1,问题你之前有没有发送过,TI复位等于0,所以TI永远等不可能等于1,建议多看看书!我把程序稍微给你修改一下,这样就可以了,如果还有问题桥轮可以QQ

#include"reg51.h"
void main()
{
unsigned char table [] = {"01234567"};
unsigned char i,j,k;
SCON = 0x40;
TMOD = 0x20;
TH1 = 0xfa;(波特率是22.1184MHZ吗)
TL1 = 0xfa;
TR1 = 1;

while(1)
{
for(i = 0;i < 7;i++)

{
SBUF = table[i];
while(TI == 0);
TI = 0;

}

}
}

‘贰’ AT89C51单片机怎么用汇编语言让4个数码管同时显示1234

1、首先我们先打开keil。

‘叁’ 单片机C语言一程序问题

while(!input)
{
DataPort=dofly_WeiMa[i]; 这部分带有松手检测 如果按键按下 因为单片机速度很快 刚开始i是位0的 但是因为有松手检测 所以可能i++好几下了 然后你松败悔后了之后 退出松手检测 那么你显示的值当然就是跳跃的啦
LATCH2=1;
LATCH2=0;
DataPort=dofly_DuanMa[i];就说这里吧 第一薯野次i=0,因为松手检测 后面的i++了 当你按键放开了后 你的i假设++到了5 那么这里就是DataPort=dofly_DuanMa[5];但是这是随机的 因为谁也不知道你什么时候松手 你不松手 那么i就一直++ 然后到8 变为零
说白了 就是数枯喊你的松手检测和显示没做好
LATCH1=1;
LATCH1=0;
i=i+1;
if(i==8)
{
i=0;
}
}

‘肆’ at89c51单片机驱动8个数码管滚动显示数字,要求8个数码管同时显示。我看到的是8个数码管全灭!!!

题目的要求是什么?

要求8个数码管同时显示。
让数码管依次显示0~7这8个数字,
8个数裤洞码管滚动显示数字,

是先显示1秒钟01234567,之后再显示70123456,1秒钟之后,再显示67012345,...吗?
楼主的程序,现启纯歼在是显示出来什么了?
========
电路图有明显错误。
看程序中的段码,应该使用共阳的数码管,即,数码管的公共端,应该接高电平。
但是,电路中,却经过三极管,接地了。悄冲

‘伍’ 教程上的一段单片机程序,有bug,有时候总按出0来,不知道怎么回事,大神帮忙具体分析下~

程序BUG是你子函数内部没有返回数值;
unsigned char KeyScan(void) //函数的正确使用方法
{
return (); //郑消返回数据
}

你的程序写的效率不高我给你改一下。
程序我给你改了一下:

unsigned char KeyScan(void)
{
unsigned char keyvalue;
if(KeyPort!=0xff)
{
delayms(10);//延时10ms后再漏丛枝检测一次
if(KeyPort!=0xff)
{
keyvalue=KeyPort;//此是本程序的BUG P1口的值 在松手前获得 但松手后又无法获得 朋友们可以考虑一下解决方法
while(KeyPort!=0xff);
}
}

switch(keyvalue)
{
case 0xfe:return 1;break;//比较keyvalue是否=0xfe 如相等 返回 值1
case 0xfd:return 2;break;
case 0xfb:return 3;break;
case 0xf7:return 4;break;
case 0xef:return 5;break;
case 0xdf:return 6;break;
case 0xbf:return 7;break;
case 0x7f:return 8;break;
default:return 0;break;
}

return (keyvalue); //返敏返回按键数值
}

‘陆’ 51单片机编程 采用中断方式循环发送一组字符

;启动入口
ORG 0000H ;复位启动
LJMP START ;
ORG 0023H ;串口中断
LJMP COM1 ;
ORG 0200H ;主控程序
;
;主控程序
START: MOV SCON,#50H ;8位数据,可变波特率[email protected]
ANL PCON,#7FH ;波特率不倍速
MOV TMOD,#20H ;定时器1工作于方式2
MOV TL1,#0FDH ;设定定时初值
MOV TH1,#0FDH ;设定定时器重装值
;
MOV SP,#80H ;设置堆栈
SETB TR1 ;启动定时器1
CLR ET1 ;禁止定缓知时器1中断
SETB ES ;允许串口中断
SETB EA ;允许总中断
;
MOV R0,SDAT00 ;收发数据首地址
MOV B,#8 ;8字节数据
MOV A,#30H ;'0'
LOOP: MOV @R0,A ;
INC A ;
INC R0 ;
DJNZ B,LOOP ;装填‘01234567’
;
MOV FSQZZ,#61H ;串口发送指针
MOV SBUF,#0 ;启动发送
JMP $
;
;串行口中断服务程序(9600波特率1起始位8数据位1停止位无校验)
COM1: PUSH PSW ;先行保护现场,9600bps
PUSH ACC ;
MOV PSW,#10H ;选2组R寄存器
;
JBC TI,PDZZ ;发送中断
CLR RI ;接收中断
LJMP QCOM ;
;
PDZZ: MOV R0,FSQZZ ;串口发送指灶陪针
CJNE R0,#SDATDN,WBUF ;比较下越界值
MOV FSQZZ,#60H ;串口隐哪蠢发送指针
;
WBUF: MOV SBUF,@R0 ;发送当前字节
INC FSQZZ ;发送指针+1
;
QCOM: POP ACC ;恢复现场
POP PSW ;
RETI ;
;
;收发缓冲区
SDATUP EQU 5FH ;数据地址上越界值
SDAT00 EQU 60H ;收发数据首地址
SDAT11 EQU 67H ;收发数据尾地址
SDATDN EQU 68H ;数据地址下越界值
FSQZZ EQU 69H ;串口发送指针
END ;


‘柒’ 单片机8个流水灯程序 要求:间隔0.5秒流水灯一次(01234567) 两盏流水一次(01,23,45,67) 闪亮一次(8盏灯亮灭

#include<reg51>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar t)
{
uchar x;
for(x=0;x<t;x++)
{
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=0;
}
}
uchar code display[]={0x03,0x06,0x60};
uchar k,m;
void main()
{
while(1)
{
TMOD=0x01;
for(m=0;m<3;m++)
{ P1= display[k];
delay(10);
}
}
顺手写的觉得好就采纳吧

‘捌’ LED数码管动态显示2017的51单片机汇编语言

共阳极接法。

abcdefg 为 P0 口,位选端为 P2 口。

八个数码管同掘孝时显示 01234567。判没稿

电路与程察核序,如下所示:

‘玖’ 单片机编程

上个提问电脑不能回复了,在这里发程序。
#include<reg51.h>
unsigned char code distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char disbuf[]={0,1,2,3};
unsigned char t0n; //定时器中断次数
void delay()
{
unsigned int j;
for(j=300;j>0;j--);
}
//显示子程序
void display()
{
unsigned char j,disbit=0x01;
for(j=0;j<4;j++)
{
P2=~disbit;
P0=distab[disbuf[j]];
disbit<<=1;
delay();
}
}
void main()
{
unsigned char n=3;
TMOD=0x01;
TH0 =0x3C;//晶振12M,定时50ms
TL0 =0xB0;
IE =0x82;
TR0 =1;
while(1)
{
display();
if(t0n>=20)/缓悔仔/1秒到
{
t0n=0;
n++;
if(n>7)
n=0;
disbuf[0]=disbuf[1];//显示的四位数向前搭左移一位扰汪
disbuf[1]=disbuf[2];
disbuf[2]=disbuf[3];
disbuf[3]=n;
}
}
}
//定时器T0中断服务程序
void T0_isr() interrupt 1
{
TH0 =0x3C;
TL0 =0xB0;
t0n++;
}

阅读全文

与单片机01234567相关的资料

热点内容
程序员试用期汇报问题协助怎么写 浏览:127
抖音算法到底是什么 浏览:126
哪个vlan技术对报文加密 浏览:570
单片机定时电路 浏览:672
山西平台服务器云主机 浏览:700
按摩肚脐解压视频 浏览:989
php55安装教程 浏览:137
云服务器怎么查找本机域名 浏览:22
qd123y压缩机参数 浏览:385
程序员妈妈怀孕 浏览:490
金普国际编程 浏览:537
java什么是引用类型 浏览:944
这是命令吗txt 浏览:314
支付宝android包名 浏览:154
eclipsemaven命令 浏览:68
24路服务器配什么cpu 浏览:466
压缩文件和解压文件哪个快 浏览:675
亚马逊云服务器视频通话 浏览:912
金融知识app哪个好 浏览:978
农行理财app收益在哪里 浏览:969