编程实现51单片机,P2口连接一个共阳极数码管,每到1s更新显示0~9s,要求采用定时器1定时

作者&投稿:杭娄 (若有异议请与网页底部的电邮联系)
现有一个51单片机系统,P2口接一个共阳极的LED数码管,编写程序满足如下要求:~

你怎么不用中断来写呢。用delay来写也行,但是运行效率不高,你别“P1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;”这样赋值,你用
main()
{
char i=0;
delay()
{
//这部分你自己写了
}
while(1)
{
delay();
switch(i)
{
case 0:
P1=0xc0;
i++;
break;
case 1:
//你自己仿照一下吧,这里
i++;
break;
//这里 ,你自己仿照一下吧,一直到 case 7:
case 8:

P1=0x90;
i=0;
break;
default:
break;
}
}
}
这里只给了你初步入门的思路,正是写程序别这么干,delay()能不用别用,这东西会让你的CPU堵塞,使得其利用率大大降低,的如果代码大了,可能会让你的CPU运行起来很卡。另外你程序里出现的是P1,但你的题目描述是P2,如果真是P2口,那么我给你的程序中P1要改为P2,还有就是还不知你的硬件接的对不,要注意一点,51单片机是弱上拉的。

时间太长大哥 估计要好几秒 根据你的程序 没必要加延时 还有 如果用不到int这么大的类型 就改为unsigned char 可以节约单片机空间

#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TABLE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};//七段码表

主程序中:
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;//开定时器1中断
EA=1;//开总中断
TR1=1;//启动定时器1
//中断子程序
void Timer1(void) interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a++;
if(a==20) {a=0;sec++;}//20次是1秒
if(sec==10) {sec=0;}
P0=TABLE[sec];

}


一个简单的51单片机编程,求程序,谢谢!
include<reg51.h> define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到f uchar number;sbit key1=P1^0;sbit key2=P1^1;uchar dat=0;void t0isr() interrupt 1 { TH0=(65536-...

求一个51单片机C语言程序编程
实验内容:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb\/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,...

帮忙编写一个51单片机的程序
注明:程序应该仿真通过了,只是你说的是低电平动作,那样你从高电平到低电平的瞬间,马上再打到高电平,不然很快1S过去,又会检测到低电平。ORG 0000H SJMP MAIN ORG 000BH SJMP T0_PRO ORG 001BH SJMP T1_PRO MAIN:SETB EA ;CPU中断开放 SETB ET1 ;定时器1中断允许 MOV TMOD,#11H ...

C51单片机程序
16位计数器 TMOD=0x01 1 0 方式2 自动重装8位计数器 TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 PCON = 0x00;PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器 WDCON = 0x00;清狗 SCON = 0x50;SCON1 = 0x40;串口控制寄存器 ...

51单片机用c语言编程实现1s定时、1khz方波、512hz方波输出,麻烦多在...
Include<reg51.h> define uchar unsigned cahr uchar times=0,sec=0;sbit p512=P1^0;sbit p1k=P1^1;void t0isr() interrupt 1 { times++;if((times%4)==0)p512=~p512;if((times%2)==0)p1k=~p1k;if(times>=205){times=0;sec++} } main(){ TMOD=0x02;TH0=256-244;TL0=...

51单片机实现程序的采集和发送
include <reg51.h> sbit led=P1^0;void send_char(unsigned char txd)\/\/ 传送一个字符 { SBUF = txd;while(!TI);\/\/ 等特数据传送 TI = 0;\/\/ 清除数据传送标志 } main(){ unsigned char tmp=0;TMOD = 0x20;\/\/ 定时器1工作于8位自动重载模式, 用于产生波特率 TH1 = 0xFD;\/\/ ...

单片机msc-51中编程实现两个一字节压缩型BCD码的减法
编程实现两个一字节压缩型BCD码的减法,设被减数地址在R0中,减数地址在R1中,差仍存于被减数地址单元中。注意是单片机中啊。--- 一字节压缩的 BCD 码相减。如:22-55 =-33。注意:-33 的 BCD 补码是 67H。MCS-51 汇编语言程序如下:MOV R2,#22H;被减数 MOV R3,#55H;减数 CLR ...

51单片机流水灯程序
程序如下:include <reg52.h> sbit led1 = P2^0;sbit led2 = P2^1;sbit led3 = P2^2;sbit led4 = P2^3;sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;\/\/点亮第一个灯 led1 = 1;led2 = 0;led3 = 0;led4 = ...

求51单片机c程序:用三个按键,kye1启动led1,key2启动led2 led1停止 在...
include<reg51.h>sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit led1=P1^4;sbit led2=P1^5;bit flag=0;main(){while(1) { if(flag==0 && key1==0) { led1=0; while(key1==0); } if(key2==0) { led1=1; led2=0; while(...

51单片机编程实现定时器产生中断输出方波
你画的波形图不是方波,应该是矩形波。include"reg52.h"define uint unsigned int uint k;sbit out=P1^1;\/\/定义输出脚 void main(){ TMOD=0x01;\/\/定时器0工作方式1 TH0=(65536-5000)\/256;\/\/12M晶振5ms计时常数 TL0=(65536-5000)%256;EA=1;\/\/开总中断 ET0=1;\/\/开定时器0中断 TR0=...

安泽县18540956292: 51单片机怎样可以将P1跟P2的端口用程序处理像条导线一样连接起来 -
谭恒可普: 导线一样连接起来?那不是短路么?你是想把P1口的信号转到P2口去么?C里直接P2 = P1; 就可以了,把P2口的信号转到P1口去P1 = P2;

安泽县18540956292: 求51单片机汇编语言 要求P1口LED灯闪烁 并且P2口接1个数码管自动计数并且P3.2按键计数 求答案啊 -
谭恒可普: ORG 0000H LJMP MAIN ORG 0003H LJMP EX0INT ORG 0030H MAIN:MOV SP,#5FHSETB IT0SETB EX0SETB EAMOV R0,#0MOV DPTR,#TABLEMOV A,R0MOVC A,@A+DPTRMOV P2,A LOOP:MOV A,P1CPL A...

安泽县18540956292: 怎么编程让51单片机并行接口输出数据 -
谭恒可普: 51单片机并行输出数据有几种方法来实现.1、每一个P口(P0,P1,P2,P3)可以直接输出并行数据,例如: MOV P0,#55H MOV P1,#0AAH MOV P2,#0FEH MOV P3,#02H2、利用P0口扩展并行口,这类芯片有244/245/373/573等等,编程需要...

安泽县18540956292: 在单片机C语言编程中怎么定义输入口P2 -
谭恒可普: 你可能是一个初学者吧?这个P2口是不需要定义的,再头文件中肯定已经定义了.比如MCS51单片机中#include 在REG51.H中,已经包含了P2口的定义(你可以打开这个文...

安泽县18540956292: 51单片机用汇编语言写下这个程序,谢谢!用8颗LED接在P2口,要求:第一颗灯先亮起来,同时第二颗 -
谭恒可普: String s1 = "xy" + "z"; String s2 = s1.intern(); System.out.println( s1==s1.intern() );System.out.println( s1+" "+s2 );System.out.println( s2==s1.intern() );*/

安泽县18540956292: 两块51单片机如何实现单向并口通讯?A - ---->B -
谭恒可普: 主机P2口对从机p1口直通连接(表示原理,不一定很可靠,这样通讯就很那个!!) main: MOV A,#64HSEND:MOV P2,ANOPNOPCLR P3.7 ;低电平表示请求从机接收SETB P3.6JB P3.6 ,$ ;从机接收后发地电平setb P3.7MOV A,#??H ;从机接收后,主机继续发其他数据SJMP SENDEND 正确就给赏钱!!!!!

安泽县18540956292: 1、若要使程序中所用的符号P2指的是51单片机的P2口,可以用下面哪...
谭恒可普: sbit input=P3^0;if(input==1){ P0=0XFF; P2=0XFF;}else { P0=0X00; P2=0X00;}

安泽县18540956292: 求一个简单的51单片机程序 (一个按键控制两个口输出) -
谭恒可普: 确实是初学呀,P0,P1,P2都有8个IO口,所以暂且给你都安排在第一个口吧. #include<reg51.h> #define uchar unsigned char sbit key=P0^0; sbit pluse1=P1^0; sbit pluse2=P2^0; void delay(int ms) { uchar i ; while(ms--)for(i=0;i<120;i++); } main() ...

安泽县18540956292: 单片机 怎么将P1和P2连用? -
谭恒可普: 示范一下:LED1 EQU 30H LED2 EQU 31H ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV LED1,#0FEH MOV LED2,#0FFH LOOP: MOV P1,LED1 MOV P2,LED2 LCALL DELAY MOV A,LED1 SETB C RLC A PUSH ACC MOV A,LED2 RLC A MOV LED2,A POP ACC JC LOOP1 ANL A,#0FEH MOV LED1,A SJMP LOOP LOOP1: ORL A,#01H SJMP LOOP END

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网