用单片机P0端口控制LED数码管,并使用定时器实现 99秒倒计时显示。
参考一下这个仿真实例,仿真试试。
本来就直接拍屏就不清晰,还不正面拍。
你用什么控制位选,我这有138控制的/********************************
用LS138控制两位数码管显示99~0,
利用定时器0延时1分钟
*********************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
uint num,i,led[2],numt0,temp,numdis;
void display(uchar numdis)//显示程序
{
/* temp++;
if(temp==480)//调整此数值改变数码显示速度
{
temp=0;//延时计数 每扫描一次加一次
--numdis;//每隔10个扫描周期加一次
}
led[0]=table[numdis%100/10];//十位
led[1]=table[numdis%10];//个位
for(i=0;i<2;i++)//实现2位动态扫描循环
{
P0=led[i];//将字模送到P0口显示
switch(i)//使用switch语句控制位选
{
case 0:LS138A=0;LS138B=0;LS138C=0; break;
case 1:LS138A=1;LS138B=0;LS138C=0; break;
}
delay(1);//此处控制动态显示,太长会有闪烁感
}*/
P0=table[numdis%100/10];
LS138A=0;LS138B=0;LS138C=0;
delay(1);
P0=table[numdis%10];
LS138A=1;LS138B=0;LS138C=0;
delay(1);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x01;//设置定时器0为工作方式1(M1M0为01)
TH0=(65536-45872)/256;//装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void main()
{
init();
num=99;//装入初始值99,数码管显示为99
while(1)
{
display(num);
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;//重装初值
TL0=(65536-45872)%256;
numt0++;//numt0每加1次判断一次是否到20次
if(numt0==20)//如果到了20次,说明1秒时间到
{
numt0=0;//然后把numt0清0重新再计20次
num--;
if(num==0)//如果num减到0,重回初始值
num=99;
}
}
望采纳!
我会汇编
单片机的p0,p1,p2,p3端口有什么作用?
可以考虑使用74LS164(好像是,记不太清了)移位寄存器芯片进行扩展。P0口为真正意思上的双向IO口,不过内部无上拉电阻,P1、P2、P3均为“准双向”IO口,内部含上拉电阻。P0和P2分为16地址线的低8位和高8位,P3口有中断和定时器等其他特殊功能,只有当你真正使用了单片机就会自然一清二楚了~...
单片机中如何用P0一个口同时控制数码管的位选与段选?
不会,只是你做成相同时间下同时输出才会有那种问题。你采用两片373,一片控制位选,一片控制段选。然后你才找单片机另一I\/O口的任意两脚,分别接入两373的使能段。这样你就能做到分开控制,也就能亮起来。
51单片机P0口可以控制继电器吗?
51单片机的所有口都不可以直接控制继电器,需加电流或电压放大器。但P0口比较特殊,不能输出高电平,需外加上拉电阻,或用低电平驱动,再加放大器。
单片机怎样用总线来控制,P0口的控制?
总线控制就是将P0口作为数据总线,P0与P2口组合成地址总线来进行数据读写的控制,用到的命令是MOVX和MOVC比如:MOVX A,@DPTR MOVX @DPTR,A MOVX A,@R0 MOVX @R0,A MOVC A,@A+DPTR
单片机的P0.0~ P0.7引脚功能是什么?
P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)。P0口有三个功能 1、外部扩展存储器时,当做数据总线(...
用单片机开发板上的p0口和p1口实现流水灯控制
你可以使用 第一:全局变量,如果p1工作,p0 停止,...或者:定义p0口的同时,定义p1口,比方说原来是p0=255;delay();p0=128;delay();...改成p0 =255;p1=255;delay();p0=128:p1=255;delay();...我没有51的开发板,只是用软件仿真了,这个程序仅供参考 include include void main(){ bit flag...
8051单片机的P0-P3口的结构有何不同
P2口在访问外部存储时和P0作地址总线,P2为高8位,P0低8位。P3口除作I\/O口外各个引脚还有第二功能,串口、中断、技术输入等,具体功能的使用看数据手册。简介 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比...
51单片机P0端口能驱动8个TTL是什么意思?
51单片机IO口能驱动8个TTL门是指它输出低电平时,允许灌入8mA电流;输出高电平时,允许输出0.32mA的拉电流。但是,有一点你提的问题不对,因为P0口是集电极开路的,不能输出高电平。只有P1、P2、P3口可以输出高电平。P0口必须外加上拉电阻才能输出高电平。加上拉电阻后,驱动能力又不止8个TTL门了...
单片机AT89S52的p0,p1,p3管脚都有什么用?
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I\/O口,p2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)...
8051单片机,用P0口控制8个LED实现循环彩灯.循环显示规律为:全亮,全灭...
include<reg51.h> define uchar unsigned char uchar times,cnt;uchar led[]={0x00,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;times++;if(times>=40){ times=0;P0=led[cnt];cnt++;cnt%=...
赧响布瑞: P0口驱动共阳极数码管,不需要上拉电阻.只需要数码管阳极接电源正,P0.7 -- P0.0接数码管的dp -- a,就可以驱动.单片机P0输出低电平点亮数码管.所说的上拉电阻指的是在信号线上接个电阻到电源上.通常在开漏输出的口线上需要上拉电阻.
仙桃市18055757189: 【51单片机】我的学习板是LED和数码管接口都是P0,请问怎么样实现分别控制呢? - ?
赧响布瑞: 我不是很明白你说的意思.不是led上面有个开关嘛,玩数码管的时候,就把开关断开,这样led就不会显示;玩led的时候,就把两个74HC573锁存器关了;把开关打开,这样不会有干扰了.如果你的意思是要在程序中分别控制数码管和led,那你只能在加个锁存器.没办法这开发板就是这样设计的.
仙桃市18055757189: AT89S52单片机的P0口能否直接驱动LED数码管?
赧响布瑞: 应该可以吧...我用P0口接数码管的abcdefgdp公共端用三极管,用的共阴极的数码管.可以正常工作....
仙桃市18055757189: 单片机中如何用P0一个口同时控制数码管的位选与段选? - ?
赧响布瑞: 不会,只是你做成相同时间下同时输出才会有那种问题.你采用两片373,一片控制位选,一片控制段选.然后你才找单片机另一I/O口的任意两脚,分别接入两373的使能段.这样你就能做到分开控制,也就能亮起来.
仙桃市18055757189: 单片机串口程序.p2控制数码管显示位,P0口数码管显示内容. - ?
赧响布瑞: unsigned char wei[]={1,2,4,8,10,20,40,80};//16进制 void main() { ck_csh(); while(1){ display();} } void display() { P2=wei[0]; P0=shuma[a]; delay(5); P2=wei[1]; P0=shuma[b]; delay(5); P2=wei[2]; P0=shuma[c]; delay(5); } 另外,不要在中断中进行数据处理,设置一个标志,在中断中设置标志,在主程序中判断标志,根据标志进行处理 延时程序最好用计时器完成,实际应用的程序一般不用软件延时
仙桃市18055757189: 单片机的P0口怎么用高电平点亮LED - ?
赧响布瑞: 单片机P0口为为集电极输出,要高电平点亮led必须在P0口接上拉电阻.
仙桃市18055757189: 51单片机P0口不用上拉电阻也能工作吗?比如说驱动数码管等??
赧响布瑞: 传统的51单片机P0口的电流驱动能力较弱.如果用来驱动数码管(多段的LED),建议增加外部的驱动器:用51单片机的P0口驱动外部驱动器,再由外部驱动器驱动数码管.这时P0口可以不用上拉电阻. (外部驱动器可以是三极管或集成电路)
仙桃市18055757189: 51单片机的P0口驱动共阴数码管的问题 - ?
赧响布瑞: 接上拉电阻驱动共阴数码管,当P0口输出为高时,数码管亮. --此时,由 VCC 经过上拉电阻,为数码管供电. --此时,P0 的引脚,几乎不导电. --数码管的亮度,取决于上拉电阻的数值.接上拉电阻驱动共阴数码管,当P0口输出为低时,数码管灭. --此时,由 VCC 经过上拉电阻,为 P0 引脚供电. --此时,P0 的引脚,导电,电流且很强. --要超过数码管发光时的,电流强度.不亮,却耗电更大,这不是个好方法.
仙桃市18055757189: 单片机的P0口可以控制四个数码管么 - ?
赧响布瑞: P0 口,控制段选比较合适.因为它驱动能力强,可以不用外加驱动器件.但是,控制位选,它的驱动能力,还不够.因为,位选的电流,可达段选的八倍.我的百度空间,有这种类型的电路.
仙桃市18055757189: 74LS245怎么驱动数码管 与单片机P0接口 是怎么接的 - ?
赧响布瑞: 74LS245是8位双向数据总线收/发器(缓冲器),带高阻输出,DI(1#)决定数据的方向,G(19#)决定输出状态,驱动数码管可以这么做:2#—9#接P0,18#—11#(不可反序)接数码管.1#接VCC(高电平),19#接GND(低电平),这是驱动一个数码管的接法.如果要驱动多个数码管,19#接扫描信号,可以采用74LS138的输出端.