亮第一个数码管(这里当他为共阳极数码管):P2^0=1;P1=XXX;//自己写出L的字形码 delay_ms(1);//延迟1ms这个时间越小越好拉 P2^0=0;//关掉第1个数码管显示 P2^1=1;//开始第二个数码管显示 //然后就以此类推
sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极 sbit wei2=P3^4;sbit wei3=P3^5;sbit key1=P2^0;//根据单片机型号自行定义,有的51单片机无此管脚 sbit key2=P2^1;uint a=0;//中断次数计数,
define dataport P1//P1直接驱动数码管的8个阳极 sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极 sbit wei2=P3^4;sbit wei3=P3^5;uint a=0;//中断次数计数,一次50ms,20次为1 秒 //共阴数码管
在看程序之前我先交代一下运行该程序的硬件要求:12M晶振,P0端口驱动显示,P2.0到P2.5控制显示扫描,P2.7输出铃声,注意:铃声功放三极管应采用pnp管。以下是该程序:ORG 00H SETB TR0 JMP START ORG 000BH LJMP T0
1、数码管驱动电路设计。一般用三极管如9013或者锁存器如74HC573来驱动,使其能够正常亮灭。2、使用动态扫描的方式让数码管能够显示你想要的数字,这个可以用中断来扫描也可以不用。3、使用实时时钟芯片如DS1302来获得你想要的
void display1() //P2为位选,P0为段选,显示格式为 23小时59分59.99秒 { uchar s,g;s=shi/10;g=shi%10;P2=wei[0];P0=duan[s]; delay(1);P2=wei[1];P0=duan[g]; delay(1);s=fen/10;g=fen%10;
程序名称:51单片机数码管电子钟汇编程序 简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒 显示格式:23-59-59(小时十位如果为0则不显示)P0口输出段选信号,P2口输出位选信号 P1.0为调时按钮,P1.1为调
求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊!
define SEG P0 //定义七段LED数码管接至Port 0 /*声明七段LED数码管驱动信号数组(共阳)*/ char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4 0x92,0x83,0xf8,0x80,0x98}; //数字5-9
I/O并行口直接驱动LED显示 1.实验任务 如图13所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。2.电路原理图
A INC R2 CJNE R2, #0AH, MAIN2 JMP MAIN2-2 TAB: DB 03FH, 06H,05BH, 4FH, 66H, 6DH, 7DH, 07H ; DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;END
数码管编码,从0到f / int code table []={ //数码管编码 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uint num;void main (){ num=0;while (1){
reti LED7Code:DB 0C0H ; 0 DB 0F9H ; 1 DB 0A4H ; 2 DB 0B0H ; 3 DB 099H ; 4 DB 092H ; 5 DB 082H ; 6 DB 0F8H ; 7 DB 080H ; 8 DB 090H ; 9 main:mov r7,#00h
数字显示中要求通过8051单片机驱动一个7段LED数码管。使7段LED数码管在第1秒钟显示“0”,第2秒钟显示 1
sbit wei3=P3^5;uint a=0;//中断次数计数,一次50ms,20次为1 秒 //共阴数码管七段码 uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时子程序 void delay1ms(uint t){
include
```c include sbit D1 = P2^0; // 定义数码管引脚 sbit D2 = P2^1;sbit D3 = P2^2;sbit D4 = P2^3;void delay(unsigned int t) // 延时函数 { unsigned int i, j;for(i = t; i > 0; i-
if( (c++) >= 300 )这样这个就会判断301次 ps:你这里C初始值 2)P0 = LED7Code[LedNumVal%10]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样 首先运算使用的是“%”,这是求余,不是整除(整除是“/
简单的单片机LED数码管C语言程序,求指导
时钟芯片DS1302汇编程序 INCLUDE CBLOCK 20H SEC ;秒 MIN ;分 HOU ;小时 DATE ;日期 MON ;月 DAY ;日 YERR ;年 DDD ;写使能位 TIME_TX ;1302发送寄存器 TIME_RX ;1302接收寄存器 COUNT1 ;COUNT2 ;DELAY1 DELAY
void DS1302_SetTime(uchar *p){ uchar addr = 0x80; uchar n = 7; DS1302_WriteData(0x8e, 0x00); //允许写操作 while (n--) { DS1302_WriteData(addr, *p++); addr += 2; } DS1302_WriteData(0x8e, 0x80)
define uchar unsigned char define uint unsigned int 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 port=P0^7;sbit sclk=P1^1;sbit dio=P1^0;
define uchar unsigned char define uint unsigned int sbit ds1302_RST =P2^0;sbit ds1302_IO =P2^1;sbit ds1302_SCLK=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit A1=P3^0;sbit A2=P3^1;sbit A3=P3^2
include
编写程序,采用51单片机驱动6个LED数码管、DS1302实现数字钟功能。
LCD_Write_Char(13,1,0x01);//写入温度右上角点LCD_Write_Char(14,1,'C'); //写入字符Cwhile (1) //主循环 {if(ReadTempFlag==1) { ReadTempFlag=0; temp=ReadTemperature(); temperature=(float)temp*0.0625; sprintf
if( (c++) >= 300 )这样这个就会判断301次 ps:你这里C初始值 2)P0 = LED7Code[LedNumVal%10]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样 首先运算使用的是“%”,这是求余,不是整除(整除是“/
其中,千位显示在D1引脚,百位显示在D2引脚,十位显示在D3引脚,个位显示在D4引脚。通过控制这四个引脚的高低电平,以及P0口的输出,实现数码管的显示。需要注意的是,上述程序只是一个简单的示例,实际应用中可能需要根据
也没有给定单片机使用的晶振频率,这题,也太不严密了。另外,楼主选的答案,三个灯的亮灭,都是同样的时间间隔。
LED数码管编程。单片机C语言。
不会对板子产生影响,只是共阴极和共阳极的程序代码不同,给个图片你看看。我曾经做过,单单编程这一项就麻烦死了. 还不如去网购买现成的,整套都有的卖.
这个你在百度文库上搜一下就有很多的,原理图、设计报告书,源程序等都有的,你上去搜一下吧。比你在这里问快多了。
#include #include sbit wei=P1^0; sbit duan=P1^1; int w[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; int i,tt; int temp; void main() { TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; tt=0; i=0; temp=0xfe; duan=1; P0=0xfe; duan=0; wei=1; P0=0x06; wei=0; while(1) {if(tt==20) { tt=0; i++; if(i==8) i=0; wei=1; P0=w[i]; wei=0; duan=1; temp=_crol_(temp,1); P0=temp; duan=0; } } } void timer() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; } 这是我的protues电路图,你可以看看,由于可简化,我没画晶振和复位电路哈
#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar temp,aa,numdu,numwe; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code tablewe[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //void delay(uint z); void main() { numdu=0; numwe=0; aa=0; TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; EA=1; ET0=1; TR0=1; while(1) { // delay(1000); // temp=_crol_(temp,1); // P1=temp; if(aa==1) { aa=0; numdu++; if(numdu==7) numdu=1; dula=1; P0=table[numdu]; dula=0; wela=1; P0=tablewe[numwe]; wela=0; numwe++; if(numwe==6) numwe=0; } } } /* void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }*/ void timer0() interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; aa++; } 另外,虚机团上产品团购,超级便宜
#include "reg52.h" #define uint unsigned int #define uchar unsigned char uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shi,fen,miao; uchar time; void delay(uint x) { uint y; for(;x>0;x--) { for(y=0;y<124;y++); } } void display(uchar shi,uchar fen,uchar miao) { P2=0; //位码 P0=(tab[shi/10]); //段码 delay(2); P2=1; P0=(tab[shi%10]); delay(2); P2=2; //位码 P0=0x40; //段码 delay(2); P2=3; //位码 P0=(tab[fen/10]); //段码 delay(2); P2=4; P0=(tab[fen%10]); delay(2); P2=5; //位码 P0=0x40; //段码 delay(2); P2=6; //位码 P0=(tab[miao/10]); //段码 delay(2); P2=7; P0=(tab[miao%10]); delay(2); } void main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { if(time==20) { time=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) shi=0; } } } display(shi,fen,miao); } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; } /*还有什么不明白继续追加*/
#include #define uchar unsigned char #define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; void DelayMS(uint ms) { uchar t; while(ms--) { for(t=0;t<120;t++); } } void main() { P0 = 0x3f; i = 0; Second_Counts = 0; TMOD = 0x01; TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; while(1); } void DSY_Refresh() interrupt 1 { TH0 = (65535-50000)/256; TL0 = (65535-50000)%256; if(++i==20) { i = 0; P0 = DSY_CODE[Second_Counts/10-1]; } }
ORG 0000H LJMP MAIN ORG 000BH T0MS EQU NOT 50000 ; 50 mS 晶振 12.000 MHz(这句原来也没用过) PJSBZ EQU 20H PJSBZY EQU 21H PST0: MOV TL0, #LOW T0MS ; T0 中断 MOV TH0, #HIGH T0MS SETB PJSBZ ; 50 mS 标志 DJNZ R6, PST02 MOV R6, #20 ; 50 mS * 20 = 1 S SETB PJSBZY ; 1 S 标志 PST02: RETI MAIN: MOV TMOD, #01H MOV IE, #82H ; 开 T0 中断 MOV SP, #30H MOV TL0, #LOW T0MS ; TO 50MS 中断 计时 0(这个也是第一次用) MOV TH0, #HIGH T0MS SETB TR0 MOV R6, #20 ; 计时初值 MOV R2, #0 MAIN2: JNB PJSBZY, MAIN2 ; 1 S CLR PJSBZY MOV A, R2 ; ADD A, #8 MOVC A, @A+PC MOV P2, A INC R2 CJNE R2, #0AH, MAIN2 JMP MAIN2-2;这句很个性 TAB: DB 03FH, 06H,05BH, 4FH, 66H, 6DH, 7DH, 07H ; DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ; END 帮忙时,看到了别人编的这个程序,拿过来用用。我加注释那几句第一次用,感觉很有特色。
能,用单片机控制8050基极电平,做成动态扫描就行。以前我做过。
在数字电路中所谓的三极管驱动,全部是用三极管的开关特性,首先你的接法是正确的,单片机选通某一个片选端时,给对应三极管基极一个高电平,该三极管导通处于饱和区,反之低电平三极管处于截止区。三极管的这种用法在数字电路中相当多的,只要是数字信号,那么它就是一个开关,无一例外。