51单片机数码管6秒c语言倒计时程序c语言

51单片机数码管显示 用按键调整时钟程序 其中包括定时器 八位数码管 中断等程序 用C语言编写的 - 叫阿莫西中心 - 中国网络使得骄傲马戏中心!
51单片机数码管显示 用按键调整时钟程序 其中包括定时器 八位数码管 中断等程序 用C语言编写的
求程序用AT89C51单片机......用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时、分。
求程序用AT89C51单片机......用六位数码管实现数字时钟,显示时分秒,用两个按键可分别调整时、分。 5
#include&reg52.h&#define uint unsigned int#define uchar unsigned charuchar temp,aa,miao,fen,sbit m=P3^0;sbit n=P3^1;uchar code table[]={&//数码管编码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void display(uchar miao,uchar fen,uchar shi);void delay(uint z);void init();void main(){&&init();//初始化子程序&miao=0;&shi=0;&fen=0;&while(1)&{&&&display(miao,fen,shi);&}&}
void delay(uint z){&uint x,y;&for(x=z;x&0;x--)&&for(y=110;y&0;y--);}
void display(uchar miao,uchar fen,uchar shi)& //& 显示子函数{&&&&P0=0x00;&&P0=table[miao%10];&&P2=0x7f;&&delay(1);&&&P0=0x00;&&P0=table[miao/10];&&P2=0&&delay(1);
&&P0=0x00;&&P0=table[fen%10];&&P2=0&&&delay(1);&&&&P0=0x00;&&P0=table[fen/10];&&P2=0&&delay(1);&&&&P0=0x00;&&P0=table[shi%10];&&P2=0xf7;&&delay(1);&&
&&&& P0=0x00;&&P0=table[shi/10];&&&P2=0&&&delay(1);}
void init()&& // 初始化子函数{&&temp=0;&TMOD=0x01;&TH0=()/256;&TL0=()%256;&//定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872&EA=1;&ET0=1;&TR0=1;&}
void timer0() interrupt 1&//定时计数器中断{&TH0=()/256;&TL0=()%256;& 、&aa++;&if(aa==20)&//中断2次位1S,秒加1&&&& &{&&miao++;&&aa=0;&&if(miao==60)&&&{&&&&fen++;& //& 满60S, 分加1,秒清0&&&&miao=0;&&&&if(fen==60)&&&&&{&&&&&&shi++;&// 小时加1&&&&&&fen=0;&&&&&&if(shi==24)&shi=0;&//小时满&&&&&}&&&}&}&if(m==0)& //& 调分&{&&delay(2);&&if(m==0)& fen++;&&if(fen==60) fen=0;&&delay(2);&&while(!m);&}&if(n==0)&& //&调小时&{&&delay(2);&&if(n==0)& shi++;&&if(shi==24) shi=0;&&delay(2);&&while(!n);&}}
的感言:谢了
等待您来回答
硬件领域专家(1小时学会C语言51单片机)C语言入门教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
50页免费88页免费31页免费18页免费21页免费 19页免费29页免费83页1下载券22页免费32页1下载券
喜欢此文档的还喜欢55页免费27页免费294页免费25页免费87页免费
(1小时学会C语言51单片机)C语言入门教程|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言编写,谢谢。_百度知道
急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言编写,谢谢。
最好能提供原理图。仿真图。
提问者采纳
提问者评价
太感谢了,真心有用
其他类似问题
按默认排序
其他1条回答
#include &reg51.h&#include &intrins.h&unsigned char code dis_week[]={&SUN,MON,TUE,WED,THU,FRI,SAT&};unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};//星期月参变数unsigned char data dis_buf1[16];//lcd上排显示缓冲区unsigned char data dis_buf2[16];//lcd下排显示缓冲区unsigned char data year,month,date,//年、月、日、星期unsigned char data armhour,armmin,//闹钟时、分、秒unsigned char data hour,min,sec,sec100;//时、分、秒、百分之一秒unsigned char data flag,vkey,//设置状态计数标志、按键先前值、按键当前值//标识是否启用闹钟,1--启用,0--关闭sbit rs = P2^0;//LCD数据/命令选择端(H/L)sbit rw = P2^1;//LCD读/写选择端(H/L)sbit ep = P2^2;//LCD使能控制sbitPRE = P3^3;//调整键(AN3)sbitSET = P3^4;//调整键(AN4)sbitSPK = P3^6;void delayms(unsigned char ms);//延时程序bit
lcd_busy();//测试LCD忙碌状态程序void lcd_wcmd(char cmd);//写入指令到LCD程序void lcd_wdat(char dat);//写入数据到LCD程序void lcd_pos(char pos);//LCD数据指针位置程序void lcd_init();//LCD初始化设定程序void pro_timedate();//时间日期处理程序void pro_display();//显示处理程序void pro_key();//按键处理程序void time_alarm();//定时报警功能(闹钟)unsigned char scan_key();//按键扫描程序unsigned char week_proc();//星期自动计算与显示函数bit leap_year();//判断是否为闰年void lcd_sef_chr();//LCD自定义字符程序void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s);//更新显示缓冲区函数 // 延时程序void delay(unsigned char ms){while(ms--){for(i = 0; i& 250; i++)
//执行一条_nop_()指令为一个机器周期_nop_();_nop_();_nop_();}}}//测试LCD忙碌状态bit lcd_busy(){rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&0x80);//LCD的D0--D7中,D7=1为忙碌,D7=0为空闲ep = 0;}//写入指令到LCDvoid lcd_wcmd(char cmd){while(lcd_busy());//当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy为0时,开始写指令rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 =_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;}//写入数据到LCDvoid lcd_wdat(char dat){while(lcd_busy());//当lcd_busy为1时,再次检测LCD忙碌状态,lcd-busy为0时,开始写数据rs = 1;rw = 0;ep = 0;P0 =_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;}//LCD数据指针位置程序void lcd_pos(char pos){lcd_wcmd(pos|0x80);//数据指针=80+地址码(00H~27H,40H~67H)}//设定二个自定义字符,(注意:LCD1602中自定义字符的地址为0x00--0x07,即可定义8个字符)//这里我们设定把一个自定义字符放在0x00位置(000),另一个放在0x01位子(001)void lcd_sef_chr(){//第一个自定义字符lcd_wcmd(0x40);//&01 000 000&
第1行地址 (D7D6为地址设定命令形式&#5D3为字符存放位置(0--7),D2D1D0为字符行地址(0--7))
lcd_wdat(0x1f);//&XXX 11111&第1行数据(D7D6D5为XXX,表示为任意数(一般用000),D4D3D2D1D0为字符行数据(1-点亮,0-熄灭)lcd_wcmd(0x41);//&01 000 001& 第2行地址
lcd_wdat(0x11);//&XXX 10001&第2行数据lcd_wcmd(0x42);//&01 000 010& 第3行地址
lcd_wdat(0x15);//&XXX 10101&第3行数据lcd_wcmd(0x43);//&01 000 011& 第4行地址
lcd_wdat(0x11);//&XXX 10001&第4行数据lcd_wcmd(0x44);//&01 000 100& 第5行地址
lcd_wdat(0x1f);//&XXX 11111&第5行数据lcd_wcmd(0x45);//&01 000 101& 第6行地址
lcd_wdat(0x0a);//&XXX 01010&第6行数据lcd_wcmd(0x46);//&01 000 110& 第7行地址
lcd_wdat(0x1f);//&XXX 11111&第7行数据lcd_wcmd(0x47);//&01 000 111& 第8行地址
lcd_wdat(0x00);//&XXX 00000&第8行数据 //第二个自定义字符lcd_wcmd(0x48);//&01 001 000&
lcd_wdat(0x01);//&XXX 00001&第1行数据 lcd_wcmd(0x49);//&01 001 001& 第2行地址
lcd_wdat(0x1b);//&XXX 11011&第2行数据lcd_wcmd(0x4a);//&01 001 010& 第3行地址
lcd_wdat(0x1d);//&XXX 11101&第3行数据lcd_wcmd(0x4b);//&01 001 011& 第4行地址
lcd_wdat(0x19);//&XXX 11001&第4行数据lcd_wcmd(0x4c);//&01 001 100& 第5行地址
lcd_wdat(0x1d);//&XXX 11101&第5行数据lcd_wcmd(0x4d);//&01 001 101& 第6行地址
lcd_wdat(0x1b);//&XXX 11011&第6行数据lcd_wcmd(0x4e);//&01 001 110& 第7行地址
lcd_wdat(0x01);//&XXX 00001&第7行数据lcd_wcmd(0x4f);//&01 001 111& 第8行地址
lcd_wdat(0x00);//&XXX 00000&第8行数据
}//LCD初始化设定void lcd_init(){lcd_wcmd(0x38);//设置LCD为16X2显示,5X7点阵,八位数据借口delay(1);lcd_wcmd(0x0c);//LCD开显示及光标设置(光标不闪烁,不显示&-&)delay(1);lcd_wcmd(0x06);//LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)delay(1);lcd_wcmd(0x01);//清除LCD的显示内容delay(1);}//闰年的计算bit leap_year(){if((year%4==0&&year%100!=0)||year%400==0)//闰年的条件leap=1;elseleap=0;}//星期的自动运算和处理unsigned char week_proc(){unsigned char num_num_leap=year/4-year/100+year/400;//自00年起到year所经历的闰年数if( leap_year()&& month&=2 )
//既是闰年且是1月和2月c=5;else c=6;week=(year+para_month[month]+date+num_leap+c)%7;//计算对应的星期}//更新显示缓冲区void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s){dis_buf1[0]=t1; //dis_buf1[1]=0x20; //空格dis_buf1[2]=50; //'2' dis_buf1[3]=48;
//'0'dis_buf1[4]=year/10+48; dis_buf1[5]=year%10+48; dis_buf1[6]=0x2d;dis_buf1[7]=month/10+48;dis_buf1[8]=month%10+48; dis_buf1[9]=0x2d; //'-'dis_buf1[10]=date/10+48;dis_buf1[11]=date%10+48;dis_buf1[12]=0x20;dis_buf1[13]=dis_week[4*week];dis_buf1[14]=dis_week[4*week+1];dis_buf1[15]=dis_week[4*week+2];dis_buf2[0]=t2[0]; dis_buf2[1]=t2[1]; dis_buf2[2]=t2[2]; dis_buf2[3]=t2[3];dis_buf2[4]=t2[4]; dis_buf2[5]=t2[5];dis_buf2[6]=t2[6];//空格 if (alarm)dis_buf2[7]=0x01;//alarm=1,显示闹钟启用标致(第二个自定义字符)elsedis_buf2[7]=0x20;//alarm=0,不显示闹钟启用标致dis_buf2[8]=dis_h/10+48; dis_buf2[9]=dis_h%10+48; dis_buf2[10]=0x3a;//':'dis_buf2[11]=dis_m/10+48;dis_buf2[12]=dis_m%10+48;dis_buf2[13]=0x3a;dis_buf2[14]=dis_s/10+48;dis_buf2[15]=dis_s%10+48;}//时间和日期处理程序void pro_timedate(){sec++;if(sec & 59){sec = 0; min++; if(min&59){min=0; hour++; if(hour&23){hour=0; date++; if (month==1||month==3||month==5||month==7||month==8||month==10||month==12) if (date&31) {date=1;month++;}//大月31天 if (month==4||month==6||month==9||month==11) if (date&30) {date=1;month++;}//小月30天 if (month==2) {if( leap_year())//闰年的条件{if (date&29) {date=1;month++;}}//闰年2月为29天 else{if (date&28) {date=1;month++;}}//平年2月为28天 } if (month&12) {month=1;year++;} if (year&99) year=0;}}}week_proc();if (sec==armsec && min==armmin && hour==armhour){if (alarm)TR1=1;//闹钟启用时,报警时间到,启动Timer1}}//显示处理程序void pro_display(){lcd_pos(0x00);for (i=0;i&=15;i++){lcd_wdat(dis_buf1[i]);}lcd_pos(0x40);for (i=0;i&=15;i++){lcd_wdat(dis_buf2[i]);}}//Timer0中断处理程序,秒的产生void timer0() interrupt 1 {TH0=0xD8;TL0=0xF0;sec100++;if(sec100 &= 100)//1秒时间 (100*10ms=1000ms=1s){sec100 = 0; pro_timedate();//调用时间和日期处理程序}if (sec&0x01)//&RICHMCU&闪一秒,停一秒update_disbuf(0x00,&
&,hour,min,sec);
//0x00表示显示00位置的自定义字符else
update_disbuf(0x00,&RICHMCU&,hour,min,sec);
pro_display();
//调用显示处理函数}//按键扫描程序unsigned char
scan_key(){skey=0x00;//给变量vkey置初值skey|=PRE;//读取PRE键的状态skey=skey&&1;//将PRE键的状态存于skey的B1位skey|=SET;//读取SET键的状态,并存于skey的B0位//返回skey的键值(即PRE,SET的状态)}//外部中断INT0中断处理程序void int0() interrupt 0 {TR0=0;//禁止Timer0IE=0;//禁止中断lcd_wcmd(0x0e);//显示光标&_&,整个光标不闪烁alarm=1;update_disbuf(0x50,&alarm:&,armhour,armmin,armsec);//更新显示数据,0x50表示要显示&P&pro_display();//调用显示处理程序lcd_pos(0x47);
//使光标位于第一个调整项下flag=0;vkey=0x03;while(flag^0x0a){skey = scan_key();//扫描按键状态if (skey^vkey)//若skey与vkey相同,跳出循环,相异执行循环体{delay(10);//去按键抖动skey = scan_key();//转回扫描按键状态if (skey^vkey)//若skey与vkey相同,跳出循环,相异执行循环体{vkey=//将skey的值付给vkeyif (skey==0x01)//PRE键按下{ flag++;//调整标志位加1 switch (flag)//将光标置于相应调整位置{
case 1: lcd_pos(0x49);//光标置小时报警设置位置 case 2:lcd_pos(0x4c);//光标置分钟报警设置位置
case 3:lcd_pos(0x4f);//光标置秒时报警设置位置case 4:update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x05);//光标置年调整位置
case 5:lcd_pos(0x08);//光标置月调整位置case 6:lcd_pos(0x0b);//光标置日调整位置case 7: lcd_pos(0x49);//光标置时调整位置case 8:lcd_pos(0x4c);//光标置分调整位置case 9:lcd_pos(0x4f);//光标置秒调整位置default:}}if (skey==0x02)
//SET键按下{pro_key();//转设置按键处理程序}}} } lcd_wcmd(0x0c);//设置LCD开显示及光标不闪烁,不显示&-&lcd_wcmd(0x01);
//清除LCD的显示内容IE=0x8f;
//CPU开中断,INT0,INT1,开中断TR0=1;//Timer0启动}//主程序,初始化及初值设定void main(){lcd_init();
//初始化LCDlcd_sef_chr();//写入自定义字符号hour=0;min=0;sec=0;
//开机时的时,分,秒显示armhour=0;armmin=0;armsec=0;//开机时的时,分,秒报警初值year= 5; month=1;date=1;
//开机时的年,月,日,星期显示week_proc();alarm=1;//初始开机,启用闹钟IE = 0x8f;//CPU开中断,INT0,INT1,Timer0,Timer1开中断IP = 0x04;//设置INT0为中断最高优先级IT0=0;IT1=0;//外部INT0,INT1设置为电平触发方式(注意,触发不要选边沿方式,易误动)TMOD = 0x11;//Timer0,Timer1工作于模式1, 16位定时方式TH0 = 0TL0 = 0x00;//Timer0置10ms定时初值 TH1 = 0TL1 = 0x00;//Timer1置初值 TR0 = 1;//Timer0启动TR1 = 0;while(1);}//设置按键处理程序void pro_key(){switch (flag){ case 0:alarm=!//启用或关闭闹钟(alarm=1:启用,alarm=0:关闭)update_disbuf(0x50,&alarm:&,armhour,armmin,armsec); //更新显示数据pro_display();//调用显示处理lcd_pos(0x47);//光标回到原调整位置 case 1:armhour++;if (armhour&23) armhour=0;update_disbuf(0x50,&alarm:&,armhour,armmin,armsec); //更新显示数据pro_display();//调用显示处理lcd_pos(0x49);//光标回到原调整位置case 2:armmin++;if (armmin&59) armmin=0;update_disbuf(0x50,&alarm:&,armhour,armmin,armsec);pro_display();lcd_pos(0x4c);case 3:armsec++;if (armsec&59) armsec=0;update_disbuf(0x50,&alarm:&,armhour,armmin,armsec);pro_display();lcd_pos(0x4f);case 4:year++;if(year& 99) year= 0;week_proc();
//星期自动运算update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x05);case 5:month++;if (month&12) month=1;week_proc();//星期自动运算update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x08);case 6:date++;if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)if (date&31) date=1;//大月31天if (month==4||month==6||month==9||month==11)if (date&30) date=1;//小月30天if (month==2){if(leap_year())//闰年的条件{if (date&29) date=1;}//闰年2月为29天 else{if (date&28) date=1;}}//平年2月为28天week_proc();
//星期自动运算update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x0b);case 7:hour++;if (hour&23) hour=0;update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x49);case 8:min++;if (min&59) min=0;update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x4c);case 9:sec++;if (sec&59) sec=0;update_disbuf(0x50,&time: &,hour,min,sec);pro_display();lcd_pos(0x4f);default: }}//Timer1中断处理程序,产生报警的声音void timer1() interrupt 3 {TH1=0TL1=0x00;SPK=~SPK; }//外部中断INT1中断处理程序,停止报警声音void int1() interrupt 2{if(TR1)TR1=0;} 实验说明:按K1按键进入设定状态按K2,依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,直到退出设置状态按K3,调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字LCD第二排中间显示小喇叭,表示启用闹钟功能,无则禁止闹钟功能(可在调整状态进行设置)正常状态,LCD上排最前面显示自定义字符,LCD下排最前面闪动&RICHMCU&设置状态,LCD上排最前面显示&P&,下排最前面在设置闹钟时间时显示&alarm:&,其它状态显示&time&年代变化,星期自动转换望采纳,谢谢~~
51单片机的相关知识
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁用C语言编写AT89C51单片机程序,设计一个智能数字钟。_百度知道
用C语言编写AT89C51单片机程序,设计一个智能数字钟。
用C语言编写AT89C51单片机程序,设计一个智能数字钟。基本要求:1.C语言程序要求是模块化设计。2.该闹钟基于AT89C51单片机及相关外围电路进行设计。3.该闹钟有4个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒)。4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能。S2是设定键,即该键按下,将分别选中需要设定的选项。S3键是加键,即按下去表示相应选项加1。S4键是减键,即按下去表示相应的选项减1。5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s。发挥要求:1.定时时间可被打断,即打断后恢复时继续计时。2.设置闹钟报警功能;3.能切换显示年月日等信息。
并实现分,秒倒计时,注意用c语言编写
提问者采纳
提问者评价
要是有倒计时就好了。
其他类似问题
数字钟的相关知识
按默认排序
其他1条回答
这是我的课程设计,6个数码管,显示时分秒,三个按钮P0.0、P0.1、P0.2可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。#include&AT89X52.H&#define uchar unsigned char //**********************************************************************时钟的uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef};
//NPN,阿拉伯数码(共阳数码管专用)//uchar one[10]={0x40,0x4f,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//PNP三极管,低电平使能uchar three[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//扫描int num[6]={2,3,5,9,3,6};uint a,t,d;
void time();
//计时void turn();
//调时 void delay(int);
//***********************************************************************彩灯的uchar light[24]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e};
int n,m=6,h;void go();
//====================================主函数========================================
void main(){
TMOD=0x02;
//允许计数 ET0=1;
//允许中断 EA=1;
//主循环 {
for(a=0;a&6;a++)
P3=three[a];
P1=one[num[a]];
}//=====================================中断函数=================================void work()interrupt 1 using 0
//时钟时间 h++;}//=====================================计时子函数================================void time()
{ if(t&=4000)
//中断了4000次,一秒 {
if(num[5]&9)
if(num[4]&5)
if(num[3]&9)
if(num[2]&5)
if(num[1]&9)
if(num[0]&1)
if(num[1]&3)
}}//====================================调时子程序===========================================void turn(){ if(P0_0==0)
if(P0_0==0)
if(num[1]&9)
if(num[0]&1)
if(num[1]&3)
while(P0_0==0); } if(P0_1==0)
if(P0_1==0)
if(num[3]&9)
if(num[2]&5)
while(P0_1==0); } if(P0_2==0) {
if(P0_2==0)
if(num[5]&9)
if(num[4]&5)
while(P0_2==0); }}//========================================彩灯===========================================void go(){
if(h&=500*m)
P2=light[n];
if(n==24) {
m--; } if(m==0)
m=6;}//=====================================延时子程序==========================================void delay(int c){
for(i=0;i&30*c;i++);}
等待您来回答
您可能关注的推广回答者:回答者:
下载知道APP
随时随地咨询
出门在外也不愁
说的太好了,我顶!
Copyright & 2014
Corporation, All Rights Reserved
Processed in 0.0511 second(s), 3 db_queries,
0 rpc_queries用c语言控制四位的数码管显示ce77并二十四秒倒计时,我现在学的是51单片机_百度知道
用c语言控制四位的数码管显示ce77并二十四秒倒计时,我现在学的是51单片机
我有更好的答案
按默认排序
推荐郭天祥《10天学会单片机》,去看两遍,再实际操作几遍,单片机基本就ok了
我也学51的
刚学会流水灯
我也学51的
刚学会流水灯
流水灯我也会了
现在想学数码管呢
还未来的及看书
数码管显示ce77并二十四秒倒计时?这句话什么意思,
就是先显示ce77然后二十四秒倒计时
其他类似问题
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁ASM.TIME 51单片机汇编,实现了数码管显示的倒计时时钟。 SCM 开发 194万源代码下载-
&文件名称: ASM.TIME& & [
& & & & &&]
&&所属分类:
&&开发工具: Asm
&&文件大小: 20 KB
&&上传时间:
&&下载次数: 26
&&提 供 者:
&详细说明:51单片机汇编,实现了数码管显示的倒计时时钟。
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&实例13&&......\&&......\13.BIN&&......\13.HEX&&......\13.LST
&[]:很好,推荐下载
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站194万海量源码库中尽情搜索:
&[] - 单片机倒计时程序,已经过调试了,很好用。
&[] - 99秒倒计时汇编程序,帮助单片机初学者练习定时/计数器和数码管显示编程。
&[] - 设计一个单片机控制的秒表系统。利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
&[] - 利用单片机、HD7279、键盘,实现计时器、倒计时器。
&[] - 51单片机999秒倒计时程序,为初学51单片机者提供一个很简单的程序
&[] - 基于51单片机 可以自定义倒计时时间 控制继电器吸合 断开 数码管显示 两个按键控制
&[] - 这是基于51单片机的倒计时程序,已经经过调试,能实现
&[] - 汇编课的作业,右上角显示系统时间,倒计时。若倒计时结束发声并显示提示信息。
使用说明:cmd中运行,按S键倒计时开始,按P倒计时暂停。
主要技术:设置新的中断向量(1CH,9H),中断驻留,发声,显示系统时间
&[] - 这是我用汇编语言编写的计时器程序,通过计算机发命令开始倒计时,其中也有其他功能,但主要是倒计时,比较好用,这是个小程序,穿上来了表心意
&[] - 单片机汇编,ASM实现红外控制小车的姿态,用PWM控制马达的转动天狼星51单片机C语言学习第10_1课数码管静态和动态显示_土豆_高清视频在线观看请高手帮我做一个51单片机程序,C语言,万分感谢-中国学网-中国IT综合门户网站
> 请高手帮我做一个51单片机程序,C语言,万分感谢
请高手帮我做一个51单片机程序,C语言,万分感谢
转载 编辑:李强
为了帮助网友解决“请高手帮我做一个51单片机程序,C语言,”相关的问题,中国学网通过互联网对“请高手帮我做一个51单片机程序,C语言,”相关的解决方案进行了整理,用户详细问题包括:stc89c52,晶振12M,2.1 2.2 憨钉封固莩改凤爽脯鲸2.3 2.4 接4个按键开关,3.1 3.2 3.3 3.4对应接4个继电器模块(低电平有效),要求2.1按一下3.1继电器闭合6秒左右,然后自动断开,2.2按一下3.2闭合8秒,然后自动断开,2.3按一下3.3闭合2秒,然后自动断开,2.4按一下3.4闭合3秒,然后自动断开,如果在继电器闭合的时间之内按一下任意一个按键,继电器马上断开,再按一下闭合相应的继电器,例如按2.1,继电器3.1闭合,6秒之内按2.2, 继电器3.1马上断开,再按2.2,继电器3.2闭合,8秒后自动断开,具体解决方案如下:解决方案1:/*stc89c52,晶振12M.P2.1,P2.2,P2.3,P2.4接4个按键开关分别控制P3.1,P3.2,P3.3,P3.4的输出(L有效)P2.1按一下,P3.1输出6SP2.2按一下,P3.2输出8SP2.3按一下,P3.3输出2SP2.4按一下,P3.4输出3S如果在继电器闭合的时间之内按一下任意一个按键,则输出全部无效,再次按下才实现相应功能*/#include&REG52.H&typedef&unsigned&char&u8;typedef&unsigned&int&u16;typedef&unsigned&long&u32;#define&FOSC L //晶振频率#define&CLK_MODE 12 //时钟模式,12T模式#define&SYSCLK (FOSC&/&CLK_MODE) //系统时钟#define&_50MS (SYSCLK&/&20) //50msu8&T //计时器sbit&OUT_6S&=&P3^1;sbit&OUT_8S&=&P3^2;sbit&OUT_2S&=&P3^3;sbit&OUT_3S&=&P3^4;void&InitTimer0(void){ if(!&TR0) { TMOD&&=&0x0f; TMOD&|=&0x01; //T/C0定时器模式1 TL0&&=&(65536&-&_50MS)&%&256; TH0&&=&(65536&-&_50MS)&/&256; TR0&=&1; //打开T/C0 IE&&|=&0x82; //使能T/C0中断和总中断 } else { TR0&=&0; //T/C0停止 IE&&&=&nbsp憨钉封固莩改凤爽脯鲸;~2; //禁止T/C0中断 }}void&Delay(void){ u16&i; for(i&=&5000;i&!=&0;i&--) ;}void&Time0Isr(void)interrupt&1{ TL0&&=&(65536&-&_50MS)&%&256; TH0&&=&(65536&-&_50MS)&/&256; if(--&Time&==&0) { P3&|=&0x1e; IE&&=&~0x02; TR0&=&0; }}void&main(void){ u8&i,j; while(1) { i&=&P2&&&0x1e; if(i&!=&0x1e) { Delay(); j&=&P2&&&0x1e; if(i&==&j) //两次键值相等,识别为正确按键 { InitTimer0(); if(TR0) { switch(i) { case&0x0e: &&&&OUT_3S&=&0;Time&=&3&*SYSCLK&/&_50MS;& case&0x16: &&&&OUT_2S&=&0;Time&=&2&*SYSCLK&/&_50MS; case&0x1a: &&&&OUT_8S&=&0;Time&=&8&*SYSCLK&/&_50MS; case&0x1c: &&&&OUT_6S&=&0;Time&=&6&*SYSCLK&/&_50MS; } } else P3&|=&0x1e; } while(i&==&(P2&&&0x1e)) ; } }}解决方案2:这位高手非常感谢,我按照你的做法一下就成功了,能不能再帮我加几个功能,就是P2..5 P2.6再加两个按键开关,条件是2.5在1秒内连续按两下先3.4闭合3秒再3.2闭合8秒,2.6在1秒内连续按两下3.1闭合6秒解决方案3:非常感谢解决方案4:#include&&reg52.h&sbit&K1=P2^1;sbit&K2=P2^2;sbit&K3=P2^3;sbit&K4=P2^4;sbit&RY1=P3^1;sbit&RY2=P3^2;sbit&RY3=P3^3;sbit&RY4=P3^4;unsigned&int&n=0;unsigned&int&count=0;bit&flag=0;void&Tim憨钉封固莩改凤爽脯鲸er0Init(void) //50毫秒@12.000MHz{ TMOD&&=&0xF0; //设置定时器模式 TMOD&|=&0x01; //设置定时器模式 TL0&=&0xB0; //设置定时初值 TH0&=&0x3C; //设置定时初值 TF0&=&0; //清除TF0标志 TR0&=&1; //定时器0开始计时}void&main(){ Timer0Init(); EA=1; ET0=1; while(1) { if((P3&0x1E)!=0x1E&&(P2&0x1E)!=0x1E) { flag=0; P3|=0x1E; while((P2&0x1E)!=0x1E); } else { switch(P2&0x1E) { case&0x1C:RY1=0;RY2=1;RY3=1;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(6*1000/50);count=0; case&0x1A:RY1=1;RY2=0;RY3=1;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(8*1000/50);count=0; case&0x16:RY1=1;RY2=1;RY3=0;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(2*1000/50);count=0; case&0x0E:RY1=1;RY2=1;RY3=1;RY4=0;while((P2&0x1E)!=0x1E);flag=1;n=(3*1000/50);count=0; default : } } }}void&timer0()&interrupt&1{ TR0=0; TL0&=&0xB0; //设置定时初值 TH0&=&0x3C; //设置定时初值 if(flag) { if(++count&n) { ; } else { flag=0; P3|=0x1E; } } TR0=1;}解决方案5:好像少了按键消抖,有时灵有时不灵解决方案6:#include&&reg52.h&sbit&K1=P2^1;sbit&K2=P2^2;sbit&K3=P2^3;sbit&K4=P2^4;sbit&RY1=P3^1;sbit&RY2=P3^2;sbit&RY3=P3^3;sbit&RY4=P3^4;unsigned&int&n=0;unsigned&int&count=0;bit&flag=0;void&Timer0Init(void) //50毫秒@12.000MHz{ TMOD&&=&0xF0; //设置定时器模式 TMOD&|=&0x01; //设置定时器模式 TL0&=&0xB0; //设置定时初值 TH0&=&0x3C; //设置定时初值 TF0&=&0; //清除TF0标志 TR0&=&1; //定时器0开始计时}void&main(){ Timer0Init(); EA=1; ET0=1; while(1) { if((P3&0x1E)!=0x1E) { if((P2&0x1E)!=0x1E) { flag=0; P3|=0x1E; while((P2&0x1E)!=0x1E); } } else { switch(P2&0x1E) { case&0x1C:RY1=0;RY2=1;RY3=1;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(6*1000/50);count=0; case&0x1A:RY1=1;RY2=0;RY3=1;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(8*1000/50);count=0; case&0x16:RY1=1;RY2=1;RY3=0;RY4=1;while((P2&0x1E)!=0x1E);flag=1;n=(2*1000/50);count=0; case&0x0E:RY1=1;RY2=1;RY3=1;RY4=0;while((P2&0x1E)!=0x1E);flag=1;n=(3*1000/50);count=0; default : } } }}void&timer0()&interrupt&1{ TR0=0; TL0&=&0xB0; //设置定时初值 TH0&=&0x3C; //设置定时初值 if(flag) { if(++count&=n) { flag=0; P3|=0x1E; } } TR0=1;}解决方案7:主循环里不停地扫描各按键,任意一个按下后控制相应继电器吸合并启动相应的定时器(未到定时器触发时按下其它按键的话断开继电器并关闭相应的定时器),定时器触发后断开继电器并关闭相应的定时器通过对数据库的索引,我们还为您准备了:问:stc89c52,晶振12M,2.1 2.2 2.3 2.4 接4个按键开关,3.1 3.2 3.3 3.4对...答:/*stc89c52,晶振12M.P2.1,P2.2,P2.3,P2.4接4个按键开关分别控制P3.1,P3.2,P3.3,P3.4的输出(L有效)P2.1按一下,P3.1输出6SP2.2按一下,P3.2输出8SP2.3按一下,P3.3输出2SP2.4按一下,P3.4输出3S如果在继电器闭合的时间之内按一下任意一个按键,则输出...===========================================问:这个程序已经弄了我们好几天了,弄不出来,求大神们帮忙看看哪里出问题...答:第一个循环内Data = temp;直接把Data给赋值没了,如传输的数是0x7F,程序传数据是高位开始,传0了后,程序把Data = temp,就相当后面的7位给清0了。所以在没完成你要的数据的时候,要小心原始数据。 把循环内 :temp = Data《 1; Data = temp...===========================================问:以下是电子钟程序,能不能改成有这些功能:1)早上七点时蜂鸣器会响一分...答:挺复杂的,没时间帮你做, 还有单片机的编程是要看接口的,也就是说要结合电路图才能出程序。。 还有这个很花时间,我觉得你还是自己学一学整一整===========================================问:功能很简单,7个发光二极管L1——L7,按键S0、S1(均是低电平触发)。开始...答:voidTheLED_DispLay() { //发光二极管定义在P1口 unsigned char C unsigned char M; if (!S0) //这里需要你自己定义一下按键 { while(!S0); M++; P1 = (0 ===========================================问:/*定时器0中断服务子程序,用于实现5ms的延时*/ void timer() interrupt...答:void timer() interrupt 1 using 2//定时器0中断函数,interrupt 1是T0的中断入口 { Flag_Delay5ms=0;//将 延时5ms 标志位 置为 0,表示5ms结束 TH0=-;//为T0高8位赋初值,相当于TH0=()/256;可以推出晶振为12MHz TL0=-5000%25...===========================================问:只有4位管,段口和位口可以你来设置,共阴管!我主要是在显示程序上没有...答:#include #define uchar unsigned char bit flag=1; uchar j,k; uchar code tab[]={ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ }; sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3...===========================================问:设计要求:按下S4键则灯由上向下流动然后灯全亮,按下S5键则灯由下向上...答:亲,你指给张图是不行的,要看你的电路图,光看这个不知道你的S4是那个引脚,还有你的LED又是哪个引脚,蜂鸣器是哪个引脚,把电路图发来,我帮你写!!!===========================================问:#include&reg52.h& #include&intrins.h& #include &absacc.h& #include ...答:while(1) { temp=0; //采样值存储单元初始化为0 temp =rCount(); j=temp%10; //取ADC值最后一位 P0=display[j];//取显示数据,段码 } 没有看到延时,即使结果不停变化的话,点亮数码管之后要延时,不然变化速度太快,只能看到8===========================================问:7.用MCS-51单片机与ADC0809实现一个单通道模拟量采集系统,模拟量为0~5V...答:你这里面有好几个程序的,都可以给你提供,有些问题还需要细化和要求详细说明,可以交流===========================================同意楼上两位,通信根本不用p1口。在proteus中把它悬空一点关系也没有的。能不能成功还是看程序。=========================================== 就是一个计数器===========================================你用什么单片机。18b20是5个接一根线上,还是分别接IO口。IO够用的情况下分开接要简单点,不用读ROM。有需要+我===========================================你好,我就是那个人 其实我说过了,分数无所谓了, 看来你是个诚信之人。 假期有问题随时给我留言 祝你假期愉快=========================================== 我来 帮 你 解决===========================================这是个大工程,如果全部要自己写的话得需要很多时间,除非自己手里面有现成的程序,建议你还是自己查资料自己写吧===========================================人家都把编码器给你转换好了,你就做一个串口程序就ok了,只要知道协议就成.===========================================用51单片机定器达 准确 要求专用钟芯片DS1302基本钟芯片 简单找DS1302芯片PDF资料按照资料面电路连接编写程序OK关键于程序基本原理单片机读取DS1302面钟数据...===========================================你知道51上实现中文汉字输入已经是个大工程了===========================================你指的是两两闪烁还是2个,4个,6个,8个,这种?其次,P1P3口一共16个引脚,是不是加其他元件的?不加的话,那么想怎么控制呢?加我,。。。提供电路图,程序不是很难。===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助

我要回帖

更多关于 单片机数码管 的文章

 

随机推荐