用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间。

作者&投稿:酉浩 (若有异议请与网页底部的电邮联系)
请问51单片机怎么编写程序让8个数码管显示时间(时分秒)~

用定时器还是时钟芯片实现呢?都不一样的,看你的要求。我这里有,只要稍微修改就可以了,需要的话可以联系我,我随时都在线。

不是取反,是关闭对应数码管。思路:判断按键->调整时间->显示时间;你要实现闪烁,需要在显示数字部分下功夫

#include<reg51.h>

#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsigned char sec=0,min=0,hour=12,scanled;
unsigned char key,flashbit,mode,time;
unsigned char disdat[8];
sbit led=P1^0;
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=10;

disdat[3]=min%10;
disdat[4]=min/10;
disdat[5]=10;

disdat[6]=hour%10;
disdat[7]=hour/10; 
}
void flash()
{
switch(flashbit)
{
case 0:break;
case 1:
disdat[6]=0x10;
disdat[7]=0x10;
delay(50);
dischg();
delay(80);
break;
case 2:
disdat[3]=0x10;
disdat[4]=0x10;
delay(50);
dischg();
delay(80);
break;
case 3:
disdat[0]=0x10;
disdat[1]=0x10;
delay(50);
dischg();
delay(80);
break;
default:break;
}
}
void t0isr() interrupt 1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case 0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
break;
case 1:
if(time==20)
{
time=0;
if(sec>0)sec--;
else if(min>0){sec=59;min--;}
else if(hour>0){sec=59;min=59;hour--;}
else {hour=0;min=0;sec=0;}
}
break;
}
dischg();
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[7]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[6]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[5]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[4]];
break;
case 4:
P2=0x10;
P0=~ledtab[disdat[3]];
break;
case 5:
P2=0x20;
P0=~ledtab[disdat[2]];
break;
case 6:
P2=0x40;
P0=~ledtab[disdat[1]];
break;
case 7:
P2=0x80;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=8;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
sec=55;
min=59;
hour=23;
flashbit=0;
scanled=0;
time=0;
mode=0;
dischg();
while(1)
{
flash();//闪烁
if((P3&0x0f)!=0x0f){
key=P3&0x0f;
while((P3&0x0f)!=0x0f);
led=0;
delay(10);
key|=0xf0;
switch(~key)
{
case 0x01:  //p3.1选择调时、分、秒
TR0=0;
flashbit+=1;
if(flashbit>3){flashbit=0;TR0=1;}
break;
case 0x02:  //p3.2调数
if(flashbit==0)break;
if(flashbit==1)
{
hour++;
if(hour>99)hour=0;
}
if(flashbit==2)
{
min++;
if(min>59)min=0;
}
if(flashbit==3)
{
sec++;
if(sec>59)sec=0;
}
break;
case 0x04:   //选择正/倒
TR0=0;
mode++;
mode&=0x01;
if(mode==0){sec=0;min=0;hour=0;}
dischg();
break;
case 0x08: //启动/暂停
TR0=~TR0;
break;
default:break;
}
}
}
}




如何用循环语句写程序?( c语言)
清楚算法就可以很快写出:(1)只需输入2个变量n和sum,且sum=n+sum.(2)确定n的范围为n<=100 (3)循环体为 for(n=1;n<=100;n++)sum+=n;(4)根据C语言编辑规则写出程序 用for循环求:include<stdio.h> int main(void){ int n,sum=0;for(n=1;n<=100;n++)sum+=n;printf("1...

C语言中循环语句有那些?能给几个实例吗?
C语言中循环语句有for语句、while语句(当型循环)以及until语句(直到型循环)以下具体说明:for语句:使用格式为:for(表达式1;表达式2;表达式3){ ……\/\/循环体 } 执行过程如下:(1)计算表达式1;(2)判断表达式2,如果其值为非0(真),则执行循环体,否则,如果其值为0(假),执行(5)。(3...

c语言循环语句是什么?
C语言循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。三种语句比较:1、同一个问题,往往既可以用 while语句解决,也可以用 do-while或者for语句来解决,但在实际应用中,应根据具体情况来选用不同的循环语句。选用的一般原则是:(1) ...

C语言中while循环语句的用法?
答案是4 关键在这一句:while(n++<=2);先分析这个n++,它是先使用n的值后再让其自增。所以n++<=2的意思就是先拿n的值与2比较,然后让n增1 再看看这个while语句 因为它后面有一个分号,所以它的循环体是空。也就是说它一直当n为3时会跳出这个什么也没有做的循环,但n的值又自增了1为4...

C语言中循环语句的功能是什么?
1)先求解表达式1;2)求解表达式2;若其值为真(值为非0),就执行for语句中指定的内嵌语句,接着执行下一步,反之循环结束,跳至第5)步;3)求解表达式3;4)回转上面按第2)步继续执行;5)循环结束,执行for语句下面的一个语句。C语言中的for语句比其它语言中的for语句功能强很多,可以把循环...

C语言中的循环控制语句总共有哪几种?
三种。主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。以while循环语句为例:一般形式如下:while(表达式)语句;其中执行过程如下:(1)计算while后面括号里表达式的值,若其结果非0,则转入(2),否则转(3)(2)执行循环体,转(1)(3)退出循环,执行循环体下面的语句。由于...

c语言的循环语句有哪些?
C语言有三种形式的循环语句:do 语句 while(判断式);和:while(判断式)语句;和:for(起始化; 判断式;运算式)语句;在while和for中,语句将运行到表达式的值为零时结束。在do...while语句中,循环将至少被运行一次。这三种循环结构可以互相转化:for(起始化; 判断式;运算式)语句;如果语句中不使用...

用c语言编写循环语句1到6的代码怎么写?
可以使用for循环语句来实现输出1到6的代码,示例代码如下:```c include <stdio.h> int main(){ int i;for(i = 1; i <= 6; i++){ printf("%d ", i);} return 0;} ```以上代码中,我们定义了一个变量i,并且通过for循环语句进行了6次迭代。每次迭代时,将变量i的值输出到屏幕上...

c语言循环语句是什么?
在C语言中循环可分为3中,while循环、do - while循环、for 循环。while即:首先检查启动循环的条件是否满足,当条件满足时,不断地重复循环体内的语句,直到不满足条件就退出。do while即:进入do while前不做检查,而是在执行完一轮循环后再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足...

c语言中for语句是怎么用的?
语句1 ;语句2 ;...语句n ;} 执行while时,先测试“条件语句”,如果条件成立,则执行语句1到语句n,直至条件不成立时调处循环。int i=0 ;while (i<10){ i++ ;System.out.println("Hey!.get me out of here!:);} 3:do ... while 循环 do ... while 循环语句的格式为:do { 语...

定日县19419876961: 51单片机问题 编写4个LED数码管循环显示2008的程序. 用C语言写.. -
宦巩穿琥: #include<reg51.h> //----------------------------------------------- void delay(unsigned int i) //延时 {unsigned char j;while(i--) for(j = 0; j < 115; j++); } //----------------------------------------------- void main(void) {unsigned char n1;unsigned char code SEG[] = {0xc0, ...

定日县19419876961: 51单片机控制led亮5分钟灭五分钟循环5次 c程序怎么写? -
宦巩穿琥: -(void) processDigit:(int)digit{ currentNumber = currentNumber *10 + digit;[displayString appendString: [NSString stringWithFormat : @"%i",digit]]; display.text = displayString;}-(IBAction) clickDigit: (UIButton*) sender{ int digit = sender.tag; [self processDigit:digit];}

定日县19419876961: 用c语言怎样能实现当51单片机p1.0=1,则p1.2=1,并保持,直到p1.1=1时,p1.2=0并跳出循环? -
宦巩穿琥: 方法有很多,最简单的 while( 1 ) { if (p1.0 == 1) p1.2 = 1; else { p1.2 = 0; break; } } 最简单,但是实时性很差.要实时性好的话用中断,我就不写了.

定日县19419876961: 用C语言编写一51单片机程序,做单灯的左移右移,按P1.0——P1.7再从P1.7——P1.0的循环 -
宦巩穿琥: 已经测试通过,直接使用,祝成功~#include "reg52.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int void Delay(uint x) {uint a,b; for(a = x; a > 0; a--) for(b = 115; b > 0; b--); } void main() { uchar Led = 0x01, Direct = 0; ...

定日县19419876961: 高手支招:请问用C语言编程使51单片机的数码管左移循环显示0 - 7的程序怎么编呀 -
宦巩穿琥: #include #define uchar unsigned char#define uint unsigned int/******** 延时函数 ********/ delay(uint i){while(i--);}/***** 数码管显示子程序开始 *****/ sbit wr=P2^2;sbit cs1=P2^0;sbit cs2=P2^1;#define LEDdata P0 uchar code LEDcode[]={0xc0,0xf9,...

定日县19419876961: 用C语言51单片机编写数码管从00到99的循环程序 -
宦巩穿琥: {TMOD=0x01;ET0=1;EA=1;TR0=1;TH0=0x3c;TL0=0xaf; }void time_1s (void) interrupt 1 {int ncount;TH0=0x3c;TL0=0xaf;ncount++;if(ncount<20) return;{ncount=0;i++;if(i==100) i=0;} }

定日县19419876961: 怎么用C语言实现51单片机独立按键跳出while(1)死循环 执行其他循环 -
宦巩穿琥: while(1)语句只能用在主程序,而且只要用一次.如果子程序也用,必须有条件判断语句,跟一个return语句返回. 再说你的三个子程序,既然用for控制了循环次数了,为什么要用while(1)呢?而且明明知道是死循环还用?三个子程序都把那个while(1)删掉就行了!

定日县19419876961: 怎么样用51单片机点亮一个二极管,让它以0.1秒的频率连续闪烁之后停顿1秒,再接着闪烁,如此循环.C语言写 -
宦巩穿琥: 这个应该是最简单了,要求中的0.1s和1s可以用软件延时或者是定时器做,在大循环中,led先亮0.1s,再灭0.1s,重复多少次依据题目可定,在最后没led 1s就可以了

定日县19419876961: 求一个51单片机简单的中断C语言程序 -
宦巩穿琥: #include //头文件#define uint unsigned int //宏定义,如果你不嫌麻烦可以直接省略#define uchar unsigned char void delay(uint); //字程序声明 sbit D1=P1^0 ; //位定义 第一盏灯 sbit D2=P1^1 ; //第二盏,同上 sbit D3=P1^2 ; // 3 sbit D4=P1^3 ; ...

定日县19419876961: 怎么用c语言写一个51单片机的密码锁程序 -
宦巩穿琥: 这是一个你这样的键盘扫描程序,你直接在最下面的switch case里面改一下,改成你要的功能就行了,然后再自己稍微添一下自己要的功能就ok了.做这些自己一定要亲自上手,不然真的没有意思.我只能提供这么点帮助了,希望能帮到你....

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