51单片机定时器报警问题,机器语言,谢谢!!

lvwei_1102022-10-04 11:39:541条回答

51单片机定时器报警问题,机器语言,谢谢!!
定时报警器
  设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1-59秒)进行倒计时,当计时到0时数码管闪烁“00”(以1Hz闪烁),按键功能如下:
  (1)设定键:在倒计时模式时,按下此键后停止倒计时,进入设置状态;如果已经处于设置状态则此键无效。
  (2)增一键:在设置状态时,每按一次递增键,初始值的数字增1。
  (3)递一键:在设置状态时,每按一次递减键,初始值的数字减1。
(4)确认键:在设置状态时,按下此键后,单片机按照新的初始值进行倒计时及显示倒计时的数字。如果已经处于计时状态则此键无效

已提交,审核后显示!提交回复

共1条回复
hz6351686 共回答了14个问题 | 采纳率100%
程序分二个模块设计
1 显示模块(数码管或LCD显示驱动)
2 按键检测模块
1年前

相关推荐

51单片机时钟电路图功能如下:1.手用51单片机所要的材料,做一个时钟电路.(最好能给个电路图)2.时钟电路有6个数码管
51单片机时钟电路图
功能如下:
1.手用51单片机所要的材料,做一个时钟电路.(最好能给个电路图)
2.时钟电路有6个数码管,显示时,分,秒.
3.能电流后,时钟从00:00:00开始计时,每秒增加.(由于是刚建的号,分数不多,
李骏1年前1
241011 共回答了21个问题 | 采纳率90.5%

看图

51单片机 指令执行题MOV A,#11HMOV R1,#22HADD A,R1A=—————— R1=——————
引玉的砖头1年前1
胃病光荣 共回答了18个问题 | 采纳率88.9%
MOV A,#11H // 将立即数十六进制数据 11H写入寄存器A;
MOV R1,#22H //将立即数22H写入寄存器R1;
ADD A, R1 /R1里的数据和A里的数据相加,和写入寄存器A.
R1 = 22H; A = 33H.
51单片机怎样计算sin(x);和cos(x);?
51单片机怎样计算sin(x);和cos(x);?
x是我用编码器采集到的角度值,要根据这个值计算高度的,但是我用math.h中的
sin(x);这类的方法直接计算,算出来的是错误的值啊,这是怎么回事啊?难道不能这样直接用吗?
就是我算个最简单的
float A=0;
long int Lx=0;
A=sin(30);
Lx=(int)((double)A*10)
按理说 sin(30);=0.5,那么A的值是0.5 Lx=5,但是实际算出来的值根本不是这样啊 很大一个值,
独孤十剑90011年前1
娅砚407 共回答了15个问题 | 采纳率100%
三角函数的计算是使用的弧度(rad),如果你得到的角度单位是度(deg),需要将deg转换为rad才能用三角函数计算.
1rad=180/π,所以任意度数x转换为弧度就是x*π/180.
51单片机,按键控制流水灯程序,懂的进!
51单片机,按键控制流水灯程序,懂的进!
八个LED灯与单片机P1口连,按键key1与单片机P32连.该程序是完成以下工作:单片机上电,流水灯每一秒移一位,当按键key1按下后,流水灯停止在该灯处;当再次按下key1时,流水灯在停止处继续移位.
在有些时候(注意:只是有些时候)在流水灯运行的时候,按下按键,流水灯停止,而当再一次按下的时候,流水灯却一直停在那里,而不重新开始运行了.
请各位高手帮我看看该程序是否哪里有缺陷!
//
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
uchar num=0,temp;
void delay_ms(uchar N)
{
x05uchar i,j;
x05for(i=N;i>0;i--)
x05x05for(j=220;j>0;j--);
}
void init()
{
x05P0=0xfe;
x05TMOD=0x01;
x05TH0=(65536-45872)/256;
x05TL0=(65536-45872)%256;
x05EA=1;
x05ET0=1;
x05TR0=1;x05
}
void display(void)
{
x05P0=_crol_(P0,1);
x05temp=P0;
}
void key_scan(void)
{
x05if(key1==0)
x05{
x05x05delay_ms(10);
x05x05if(key1==0)
x05x05{
x05x05x05P0=temp;
x05x05x05TR0=~TR0;
x05x05}
x05}
x05while(!key1);
}
void main()
{
x05init();
x05while(1)
x05{
x05x05if(num==20)
x05x05{
x05x05x05num=0;
x05x05x05display();
x05x05}
x05x05key_scan();
x05}
}
void timer0() interrupt 1
{
x05TH0=(65536-45872)/256;
x05TL0=(65536-45872)%256;
x05num++;
}
不好意思,8个LED是与单片机P0口连,写错了.程序中写的P0是没错的!
jacky_mei1年前1
boboaihd 共回答了9个问题 | 采纳率66.7%
假如,你的程序在执行key_scan();是触发了两次中断导致num>20,你的显示函数将永远被跳过,你应该写成
if(num>20)
{
num=0;
display();
}
这是一个比较直观的错误,其他的没细看,你在试试
如何用51单片机读取ds18b20的取负温度?求教.
如何用51单片机读取ds18b20的取负温度?求教.
18b20的ram中,前两个字节放的是温度信息.其中第二个字节的高五位是符号位,当温度为正的时候,高五位的字节是0,当温度为负的时候,高五位字节为一.当温度为正的时候,只需要将两个字节的数合到一个字节,然后乘以0.0625就是实际的温度.
那么,当温度为负的时候,该怎么读取温度呢?是将两个字节合为一个字节,然后先取反,再加一,最后再和0.0625相乘吗?这样得出的结果就是实际的负温度值吗?
如果我说的问题一中的答案是对的,那么如果用液晶或者数码管显示负号.
是不是要自己在程序里判断18b20的第二个字节的高五位是不是为一.然后再
写出一个显示符号的程序啊?上面那个最后得出的结果,应该没有符号吧?
图个误乐1年前1
warcraft8283 共回答了18个问题 | 采纳率100%
判断是否是负,就是取高几位的读取值采用与的方式判断,比如(000) 11111 00001000,那么高5位可以这样弄,tempH&0x1f,如果这个值=1;说明是负的,否则就是正的啊,不过有一点,取反是对的,还要加1啊,记得哦.
至于在LCD中显示的,确实是按你说的那样,直接写上一个符号即可.
51单片机寻址方式51单片机的寻址方式 怎么区分啊 如:MOV PSW,#25H;和MOV A,#68H;他们的寻址方式
51单片机寻址方式
51单片机的寻址方式 怎么区分啊 如:MOV PSW,#25H;和MOV A,#68H;他们的寻址方式相同吗?书上说 前一个是直接寻址,后一个是立即寻址~它们不都含有立即数,
nn路1年前1
素素刘 共回答了24个问题 | 采纳率87.5%
这个啊,这本来是书上说得不确切的,他说的直接寻址那是mov psw,#25说是第一个操作数的寻址方式为直接,而MOV A,#68H说的是后一个68H 这个数的寻址方式,在书本上常有这种,说得不确切的地方,说它错,也没有,是你如何理解的问题,不过,都知道了这些也就能想得到了
51单片机 AD模数转化 tlc1549芯片
51单片机 AD模数转化 tlc1549芯片
//TLC1549驱动程序 直接调用就可以了.
//作者:mingtree
//email:ycxms88@163.com
sbit adclk=P1^2; //时钟线
sbit adcs=P1^4; //CS
sbit addata=P1^3; //数据线
//
//名称:ad_read()
//功能:读十位AD TLC1549 返回值是一个整形的数
unsigned int ad_read(void)
{
unsigned char i;
unsigned int adtemp;
adcs=1; //禁止I/O CLOCK
adcs=0; //开启控制电路,使能DATA OUT和I/O CLOCK
adtemp=0; //清转换变量
for(i=0;i
shengdsddr1年前1
MrTomato 共回答了14个问题 | 采纳率92.9%
左移一位呀,准备接收下一位
下一句if(addata)
adtemp++; 就是接收下一bit
请判断下列的MCS-51单片机指令的书写格式是否有错,若有,请说明错误原因。
请判断下列的MCS-51单片机指令的书写格式是否有错,若有,请说明错误原因。
SETB 30H.0
MOVC A,@R0+DPTR
ADD R0,R1
MOV R4,R2
MOV A,@R3
薰薰无所谓1年前1
埃及蓝012 共回答了19个问题 | 采纳率94.7%
1.错 30H不是位地址区域
2.错 对ROM的读取只能是MOVC A,@A+DPTR 或MOVC A,@A+PC
3.错 。加法指令必须有A 即 ADD A,R1
4.错。没有寄存器间的传送
5.错,间接寻址寄存器只能使用R0,R1
用51单片机做一个最小系统,使,8个小灯从右向左依次亮两个,在从左向右依次灭一个,电路图怎么画,电阻多大?
rentoushancao1年前1
_kch227fbj7ea2_ 共回答了18个问题 | 采纳率88.9%
用P1口控制8个LED灯就行,限流电阻用300欧即可,LED接成共阳极的,也就是正极接在一起,及然后接在正电源端!
C51存储器类型与MCS-51单片机物理存储器区域的关系?
asz1111_19821年前1
蓦非 共回答了22个问题 | 采纳率90.9%
C51存储器类型有bit sbit data xdata bdata pdata sfr code等,可能不全面有遗漏
对应的物理存储器是:
bit,即位数据:数据存储器位寻址区,即20H~2FH的范围,共16个字节,16*8=128个位,位地址00h~7fh,连续的.
sbit:特殊功能寄存器中的位数据:只有能够被8整除的那些特殊功能寄存器中的各个位才能被称为sbit,位地址80H~FFH,不连续的,间断的.
data:数据区,对51为00H~7FH共128个字节,对52为00H~FFH,共256个字节,用MOV寻址,前128用直接寻址或寄存器(R0~R7)寻址,后128用R0、R1间接寻址.
xdata:外部数据区,0000H~FFFFH连续,用DPTR间接寻址(MOVX指令)
bdata:位寻址去的字节,20H~2FH
sfr:特殊功能寄存器(80H~FFH),直接寻址
pdata:外部数据区,P2口保持数据,用R0R1间接寻址(MOVX指令)
code:程序存储器,用MOVC指令只读
有关51单片机AD转换接口中,采样、保持电路的作用是什么?省略该电路的前提条件是什么?
zhangxinhong1年前1
jlfa 共回答了21个问题 | 采纳率85.7%
1 采样、保持电路的作用:快速采样然后保持该采样值在AD转换的时间内不变,快速采样可以得到理想的(能反映原模拟信号特征)的采样信号;保持该采样值不变,可以保证AD转换的精度,消除转换误差.
2 省略该电路的前提条件是:该模拟信号变化的速度要很慢,而AD转换器速度要高速的 才可以 ,即满足香浓定理,AD转化器的工作频率要远远大于模拟信号的最高频率.
51单片机计数器计数一个机器周期为一次吗?是一个机器周期吗?
joynjoyn1年前1
被典当的灵魂 共回答了15个问题 | 采纳率100%
单片机计数器计的是外部输入脉冲的个数,脉冲的周期至少应该是机器周期的两倍,否则,不能正常计数.
51单片机定时器控制器中TF标志位中F是什么英文单词的缩写?什么意思?
哥舒夜飞刀1年前1
wreichsfeld 共回答了23个问题 | 采纳率91.3%
TF:Timer overflow flag.定时器溢出标志
求测量土壤湿度的电路(不用湿度传感器)及其分析原理,我是用51单片机控制的
求测量土壤湿度的电路(不用湿度传感器)及其分析原理,我是用51单片机控制的
谁有电路,湿敏电阻的型号,比较好的,谢谢
nixiaoxin1年前1
妖娆_绽放 共回答了19个问题 | 采纳率84.2%
用51内建的ad测土壤电阻
实现计算两点间的距离最好是论文.用51单片机和其他一些外围模块组合在一起实现这个功能.必有重谢!
花罡1年前1
fpllyn 共回答了20个问题 | 采纳率95%
建议用51单片机做一个超声波测距系统!
原先做过,就是不知道你的“两点间距离的大小有多大了”
问一下各位大神一个简单的51单片机定时器计数初值的问题
问一下各位大神一个简单的51单片机定时器计数初值的问题
设单片机晶振频率f=6MHz,使用定时器1以方式0产生周期为600us的等宽方波脉冲,并由p1.7输出,以查询方式完成。
N的求法如下:
(8192-N)*2=300
这里为何要乘以2?这是课本的解法,下面说说我自己的想法,有问题的也请大神们指出。
我的想法是,这里要定时300us,所以我直接TH0=(8192-300)/32,TL0=(8192-300)%32
显然课本的N为8042,而我的为7892。
召唤芙蓉1年前1
32475847 共回答了15个问题 | 采纳率86.7%
周期为600us的等宽方波脉冲,那么高低电平持续时间就是300US,所以那里会乘以2。晶振为6MHz,则一个机器周期为2US,600US就是300个机器周期
(8192-N)*2=300这里的300说的是300个机器周期。课本是对的
学51单片机,提到P0口为高阻状态,在百度知道里有人这么解释:电路
学51单片机,提到P0口为高阻状态,在百度知道里有人这么解释:电路
学51单片机,提到P0口为高阻状态,在百度知道里有人这么解释:
电路分析时高阻态可做开路理解,可以把它看作输出(输入)电阻非常大.他的极限可以认为悬空.也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态.而实际应用上与引脚的悬空几乎是一样的.
我的问题是高阻态到底是怎么产生的?为什么可以“认为”悬空?或者它真的指的是这个接口没有接到电路里?
ll2171年前1
1258xp 共回答了16个问题 | 采纳率81.3%

  如图所示为P0口电路图.P0口的输出端是由上下2只场效应管组成.当上管V1导通、下管V1截止时,P0输出高电平;当上管V1截止、下管V2导通时,P0输出低电平;当V1、V2都截止时,就是高阻态.国为场效应管截止时DS间阻抗非常高(近似于开路),两管都截止就近似于P0口悬空.高阻态就是在两只管都截止时产生的.另外,内部电路已设计成两管不会同时导通,因为一但真的同时导通,两只管子会烧坏(至少坏一只),这时这个P0口就坏了.

求单片机复习题答案1、在MCS-51单片机中,需要软件实现中断撤销的是( ).A、定时器T中断\x05\x05 B、外部
求单片机复习题答案
1、在MCS-51单片机中,需要软件实现中断撤销的是( ).
A、定时器T中断x05x05 B、外部中断 C、串口中断x05x05D、都需要
2、单片机程序存储器的寻址范围由计数器PC的位数决定的,MCS-51的寻址范围是( ).
A、4Kx05x05x05 B、8K C、64Kx05x05x05 D、128B
3、串口工作方式1的波特率是( ).
A、固定的为fosc/32x05x05x05x05x05x05x05B、固定的为fosc/16
C、可变的通过定时器T1的溢出率设定x05x05x05D、固定的为fosc/64
4、访问片外数据存储器RAM的传送指令为( ).
A、MOVCx05x05B、MOVX C、MOVx05x05x05D、以上都行
5、单片机的堆栈区应建立在( ).
A、片内数据存储区低128字节单元x05x05B、片外数据存储区
C、片内数据存储区高128字节单元x05 x05D、片内程序存储区
6、使用定时器T1时,有几种工作模式( ).
A、x051种x05x05 B、2种 C、3种x05x05D、4种
7、MCS-51有( )个并行I/O口.
A、x051x05x05B、2 C、3x05x05 D、4
8、PSW=18H时,则当前工作寄存器是( ).
A、x050组x05x05B、1组 C、2组x05x05 D、3组
9、使用8051,且EA=1时,则可以外扩ROM( ).
A、64 KBx05B、32 KB C、128 KBx05 D、256 KB
10、MCS—51有中断源( ).
A、x052x05 B、4 C、x055x05x05 D、6
11、MCS—51上电复位后,SP的内容应是( ).
A、x0500H x05B、07H C、0BHx05x05 D、03H
12、控制串行接口工作方式的寄存器是( ).
A、x05TCONx05B、PCON C、SCONx05x05 D、TMOD
13、若MCS-51中断源都编程为同级,当它们同时申请中断时CPU首先响应( ).
A、x05INTlx05x05B、INT0 C、T1x05x05x05 D、T0
14、PC中存放的是( ).
A、下一条指令的地址 x05x05x05B、当前正在执行的指令
C、当前正在执行指令的地址 x05D、下一条要执行的指令
15、MCS-51单片机可分为两个中断优先级别.各中断源的优先级别设定是利用寄存
器( ).
A、IEx05 B、IP C、TCONx05x05x05D、SCON
16、8031单片机外接ROM时,使用( )引脚来选通74LS373芯片
A.ALE B. C. D.
17、如果8031单片机的一个机器周期为2微秒,则其时钟频率为( )MHz
 A.6   B.8   C.12 D.16
18、8031单片机内含定时器和串行口的个数分别为(  )
 A.2和1 B.1和2 C.3和1 D.2和2
19、对程序存储区数据传送,应采用助记符为(  )
 A.MOVx05x05 B.MOVX C.MOVC D.PUSH
20、8031单片机外部中断0请示信号输入的引脚是(  )
  A.RXD B.  C. D.
希望尽量给出正确的答案,如果不会就注明下,不要随便给答案
小敏c1年前6
liuming1981a 共回答了24个问题 | 采纳率79.2%
1、在MCS-51单片机中,需要软件实现中断撤销的是( A).
A、定时器T中断x09x09 B、外部中断 C、串口中断x09x09D、都需要
2、单片机程序存储器的寻址范围由计数器PC的位数决定的,MCS-51的寻址范围是(C ).
A、4Kx09x09x09 B、8K C、64Kx09x09x09 D、128B
3、串口工作方式1的波特率是(C ).
A、固定的为fosc/32x09x09x09x09x09x09x09B、固定的为fosc/16
C、可变的通过定时器T1的溢出率设定x09x09x09D、固定的为fosc/64
4、访问片外数据存储器RAM的传送指令为( B ).
A、MOVCx09x09B、MOVX C、MOVx09x09x09D、以上都行
5、单片机的堆栈区应建立在( A ).
A、片内数据存储区低128字节单元x09x09B、片外数据存储区
C、片内数据存储区高128字节单元x09 x09D、片内程序存储区
6、使用定时器T1时,有几种工作模式( C ).
A、x091种x09x09 B、2种 C、3种x09x09D、4种
7、MCS-51有( D )个并行I/O口.
A、x091x09x09B、2 C、3x09x09 D、4
8、PSW=18H时,则当前工作寄存器是( ).
A、x090组x09x09B、1组 C、2组x09x09 D、3组
9、使用8051,且EA=1时,则可以外扩ROM( A ).
A、64 KBx09B、32 KB C、128 KBx09 D、256 KB
10、MCS—51有中断源( C ).
A、x092x09 B、4 C、x095x09x09 D、6
11、MCS—51上电复位后,SP的内容应是( A ).
A、x0900H x09B、07H C、0BHx09x09 D、03H
12、控制串行接口工作方式的寄存器是( D ).
A、x09TCONx09B、PCON C、SCONx09x09 D、TMOD
13、若MCS-51中断源都编程为同级,当它们同时申请中断时CPU首先响应( B ).
A、x09INTlx09x09B、INT0 C、T1x09x09x09 D、T0
14、PC中存放的是( C ).
A、下一条指令的地址 x09x09x09B、当前正在执行的指令
C、当前正在执行指令的地址 x09D、下一条要执行的指令
15、MCS-51单片机可分为两个中断优先级别.各中断源的优先级别设定是利用寄存
器( A ).
A、IEx09 B、IP C、TCONx09x09x09D、SCON
16、8031单片机外接ROM时,使用( A )引脚来选通74LS373芯片
A.ALE B. C. D.
17、如果8031单片机的一个机器周期为2微秒,则其时钟频率为( A )MHz
 A.6   B.8 C.12 D.16
18、8031单片机内含定时器和串行口的个数分别为( A  )
 A.2和1 B.1和2 C.3和1 D.2和2
19、对程序存储区数据传送,应采用助记符为( C  )
 A.MOVx09x09 B.MOVX C.MOVC D.PUSH
20、8031单片机外部中断0请示信号输入的引脚是( INT0:12pin  )
  A.RXD B.  C. D.
MCS-51单片机的最大寻址范围是多少字节?如果一个8031应用系统的外扩数据存储器RAM需扩展256K字节
MCS-51单片机的最大寻址范围是多少字节?如果一个8031应用系统的外扩数据存储器RAM需扩展256K字节
将采取什么措施扩展之?急求解答!
信好古1年前1
yuanyu5237 共回答了18个问题 | 采纳率94.4%
最大寻址范围是64K
8031用不了256k,确实想扩展也很麻烦,比如用P1口某些I/O来增加访问,但程序就麻烦了,单片机的指令不支持这样访问.
如果你的程序大的64K都放不下,估计这个51满足不了你的用途了,你可以考虑用ARM
麻烦高手帮我注释一下这段程序 51单片机的
麻烦高手帮我注释一下这段程序 51单片机的
void t0(void) interrupt 1 using 0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
if((errorflag==1) && (rightflag==0))
{
bb++;
if(bb==800)
{
bb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
P0_0=~P0_0;
}
aa++;
if(aa==800)
{
aa=0;
P0_1=~P0_1;
}
second3++;
if(second3==6400)
{
second3=0;
hibitflag=0;
errorflag=0;
rightflag=0;
cmpflag=0;
P0_1=1;
alarmflag=0;
bb=0;
aa=0;
}
}
if((errorflag==0) && (rightflag==1))
{
P0_1=0;
cc++;
if(cc
Guomm_Luo1年前3
7894561231234567 共回答了13个问题 | 采纳率100%
不知道你要怎么样的注释,它是一个定时器0,工作方式1的定时中断程序,定时器的定时时间好像是500个机器周期,其它的就是一些if条件语句和flag标志位判断,P0端口取反什么的了
如何提高超声波测距距离?用51单片机做处理器,超声波发射电路用74HC04做驱动,间断地产生40KHz方波,Vp-p约为
如何提高超声波测距距离?
用51单片机做处理器,
超声波发射电路用74HC04做驱动,间断地产生40KHz方波,Vp-p约为10V,
接收部分用CX20106处理接收.
----------------
定时器用方式1.理论计算测距可达11米多;
而实测距离为1米左右,再远就没有回波了.
Vp-p已有10V了,测距应该不止1米才对吧,软件也没限制此距离了.
有人做过此系统吗,最大可以达多少米呢?有什么方法可以解决,以增加距离?
鲁中山人1年前1
everey 共回答了19个问题 | 采纳率100%
假如这套系统是个木桶,你闲它装的水不够多,实际上它的每一块木板都短,而不是一块两块.
从你描述的情况看,目前最大的瓶颈是驱动电压和探头.发射电压提高到50-150Vp-p,采用开放式探头,应该能测到5米左右.
如果要测到11米,我还不知道您希望测距的周期是多少,1秒一次?1秒10次?10秒1次?
1、如果测距的周期较长,可以进一步提高发射电压,应达到200~800Vp-p(视探头而定),建议用脉冲变压器,驱动不能用74HC04了,换成开关管吧,瞬间电流估计应在1A-30A之间.周期长的好处是“不怕检测失败”,您可以在一个检测周期内进行多次检测,而最终的检测结果,仅是你检测成功的那一次.
2、如果测距的周期较短,一般要求每次检测都要有较高的成功率,面对不同的环境和被测物体,测距系统对接收电路要求较高.在满足1的前提下,还要改进接收电路,在放大1万-100万倍的情况下,噪音峰值电平应低于1Vp-p,20106恐怕难以胜任;
3、如果需要在室外使用,在满足前两条的前提下,还要采用防水型探头,11米的检测距离需要直径50mm以上的超声波探头;
4、如果还需要全天候的高可靠运行,或者要较高灵敏度时,还要牺牲一些测距精度,把超声波发射频率从40KHz降低到25KHz~32KHz,以减少空气损耗.
想做一个用51单片机来控制金属杆加热装置的温度呈线性变化的物理实验研究...
2012081年前1
四季无常 共回答了21个问题 | 采纳率76.2%
嗨,咱现在也是在做这个,一样的项目!交流哈啊!我也不怎么懂 .固态继电器(可控硅)+温度传感器(PT100)+温控仪表
p0口上拉电阻应选多大?我用51单片机的p0口驱动,p2口通过8550段选,p0口和数码管间的限流电阻我用的430欧,请
p0口上拉电阻应选多大?
我用51单片机的p0口驱动,p2口通过8550段选,p0口和数码管间的限流电阻我用的430欧,请问p0口的上拉电阻应选多大,我用1K的感觉亮度明显不够.是不是我的限流电阻选的也不合适啊
狼猛还是羊猛1年前1
寻觅365 共回答了13个问题 | 采纳率92.3%
建议你加10K上拉电阻后先驱动三级管在驱动数码管,上拉电阻太小 灌电流太大 51的PO口受不了,灌电流不应超过15MA为好
求助会keil和51单片机的大神,写一段数码管程序
求助会keil和51单片机的大神,写一段数码管程序
板子上选择四个***按键,从左到右依次为key1,key2,key3,key4,选择两个个数码管,从左到右依次为m1,m2.,当按下key3时,数码管显示0,每按下一次按键,在原先基础上加2,当加到20后,再按key3
数码管显示0
当按下key4时,与key3的功能相反,每按下一次,数码管在原先基础上减2,当减为0后,在按key4,数码管从20开始
遥莺相应吟1年前1
neoluker 共回答了30个问题 | 采纳率83.3%
#include "reg51.h"#define uchar unsigned charuchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; sbit key3=P1^0;//引脚你自己修改sbit key3=P1^1;uchar...
英语翻译本课题使用51单片机,DS1302时钟芯片,DS18B20温度芯片,LCD显示模块构成一个多功能电子日子,具有年
英语翻译
本课题使用51单片机,DS1302时钟芯片,DS18B20温度芯片,LCD显示模块构成一个多功能电子日子,具有年、月、日、星期、时、分、秒等功能,具有温度计功能,具备年、月、日、星期、时、分、秒校准功能.
淡若移情1年前3
aplo水 共回答了19个问题 | 采纳率84.2%
This project is to use 51 Single-Chip Microcomputer,DS1302 clock CMOS chip,DS18B20 temperature CMOS chip and LCD display module to make a multifunctional electronic calendar.It will have the following 3 functions:the 1st function is to display time,including Year,Month,Day,Week,Hour,Minute and Second; The 2nd one is to be a thermometer;The last one is the calibration of Year,Month,Day,Week,Hour,Minute and Second.
用遥控器控制51单片机led灯的亮灭,这个为什么不能实现led灯灭.
用遥控器控制51单片机led灯的亮灭,这个为什么不能实现led灯灭.
试验用红外遥控器控制数码管从1-9的数字显示正常,但是用来控制led灯时候,当按下1键的时候灯亮了,但是再按2的时候led还是亮着的,这是为什么?或者有什么别的好办法来控制,我的最终目的是想做一个用遥控器控制的电灯的亮灭的.
x09x09x09case 0x0c:DataPort=dofly_DuanMa[1];//数码管显示1
x09x09x09P1=0x05;break;//数码管控制p1口的led = 00000101
x09x09x09case 0x18:DataPort=dofly_DuanMa[2];break;数码管显示2
x09x09x09case 0x5e:DataPort=dofly_DuanMa[3];break;//3
x09x09x09case 0x08:DataPort=dofly_DuanMa[4];break;//4
x09x09x09case 0x1c:DataPort=dofly_DuanMa[5];break;//5
x09x09x09case 0x5a:DataPort=dofly_DuanMa[6];break;//6
x09x09x09case 0x42:DataPort=dofly_DuanMa[7];break;//7
x09x09x09case 0x52:DataPort=dofly_DuanMa[8];break;//8
x09x09x09case 0x4a:DataPort=dofly_DuanMa[9];break;//9
带锄头找芳草1年前1
JPZDICK 共回答了13个问题 | 采纳率100%
是你没有让它灭,所以它没有灭.你只开了没有进行关,单片机IO是不会自动给你关的,你可以这样,你按1时它开,按2时它关,那么你要把这句:“case 0x18:DataPort=dofly_DuanMa[2];break;数码管显示2”改为:“ case 0x18:DataPort=dofly_DuanMa[2]; P1 =0xFF; break;(我是假设你的LED是低电平点亮的).
51单片机问题,想问一下IT0=1和TI=1有什么区别,尽量解释清楚一些,
51单片机问题,想问一下IT0=1和TI=1有什么区别,尽量解释清楚一些,
以下程序是想让数码管一直工作,当在给外部中断0一个跳变电压时让蜂鸣器响一下,但不影响数码管显示,但是结果却是一接跳变电压,蜂鸣器一直响,数码管停止显示.最后查出原因(在程序上写出来了)
#include
sbit dula=P2^6;
sbit wela=P2^7;
sbit beer=P2^3;
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
unsigned int i;
int tt;
void main()
{ int num=0;
tt=0;
EA=1;
EX0=1;
TI=1; //这里是错的,最后改成了 IT0=1;就好了
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
wela=1;
P0=0x00;
wela=0;
dula=1;
P0=0x3f;
dula=0;
while(1)
{
if(tt==20)
{
tt=0;
num++;
if(num==16)
num=0;
dula=1;
P0=table[num];
dula=0;
}
}
}
void waibuzhongduan() interrupt 0
{
beer=0;
for(i=5000;i>0;i--);
beer=1;
}
void dingshi() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
flyonli1年前1
luyw81 共回答了13个问题 | 采纳率100%
1、设置TI=1,是人为的设置了串行发送请求完毕的中断请求标志.但是你并没有致能(es=1)串口中断.实际上你的interrupt5的处理程序也没有写,是空的.(注意这点)2、你既然没有设置it0=1(跳变触发中断),那么就是IT0=0(...
求大家帮忙解释下这段51单片机代码是什么意思,谢了!
求大家帮忙解释下这段51单片机代码是什么意思,谢了!
bit scan_key()
{
key_s = 0x00;
key_s |= K2;
key_s
chenwei8206051年前4
阳光中的女人 共回答了18个问题 | 采纳率83.3%
key_s = 0x00;//清0
key_s |= K2;//将K2的值赋给key_s ;;;K2应该是Px
key_s
关于 51单片机 和ds18b20 led显示问题:18b20采用12位温度转换,结果只使用十位个位和小数点后一位
关于 51单片机 和ds18b20 led显示问题:18b20采用12位温度转换,结果只使用十位个位和小数点后一位
18b20采用12位温度转换,结果只使用十位个位和小数点后一位,用4个led显示,第一个显示温度正负.现在的问题是温度显示超过15.0摄氏度左右,个位和十位回突然变成00.0度.部分代码如下
last=tmrtemp();
last=last*10*0.0625; //精确到小数点后一位(不四舍五入)
y[1]=last/100;//十位
y[2]=last%100/10;//个位
y[3]=last%10;//小数位
y[0]=flag;//符号位
mtjmey1年前1
土豆七片 共回答了19个问题 | 采纳率89.5%
符号位如果是负数的时候要去补码.
百位,个位,十位 除以十取余数.
小数部分设置一个变量累加起来就行了