⑴ 利用51单片机定时器编写一个c语言程序,实现一个发光二极管定时亮、灭,要求亮一秒、灭一秒交替闪烁不
利用51单片机定时器编写一个C语言程序,实现一个发光二极管定时亮、灭,
要求亮一秒、灭一秒交替闪烁不止。最好有硬件电路简图
电路与程序如下:
晶振频率,采用 12MHz。
定时器 0,定时 8ms。
中断 125 次,即为一秒。令 IO 接口取反即可。
⑵ 用c语言模拟一个数字时钟,要求延时一秒运行
1、用sleep延时刷新并获取系统时间来显示。
2、例程:
#include<graphics.h>
#include<math.h>
#include<dos.h>
#definePI3.1415926
//屏幕中心的坐标(640X480模式下)
#definemid_x320
#definemid_y240
intmain()
{intgraphdriver=DETECT,graphmode;
intend_x,end_y;
structtimecurtime;
floatth_hour,th_min,th_sec;
initgraph(&graphdriver,&graphmode,"C:\TC2");//初始化VGA屏幕模式
setbkcolor(BLACK);//使用黑色的背景色
while(!kbhit(0))//若有键盘输入,则跳出,即是结束程序
{setcolor(GREEN);//把画笔设为绿色
circle(mid_x,mid_y,180);//钟的外圆
circle(mid_x,mid_y,150);//钟的内圆
circle(mid_x,mid_y,1);//画出钟的圆心
gettime(&curtime);//取得系统当前时间
th_sec=(float)curtime.ti_sec*0.1047197551;//把秒针的角度化为弧度,为以后绘制时方便,下同
th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0;//分针的弧度
th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0;//时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5
//计算出时针的尾的坐标(时针长70)
end_x=mid_x+70*sin(th_hour);
end_y=mid_y-70*cos(th_hour);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y);//用红色线画出时针
//计算出分针坐标(分针长110)
end_x=mid_x+110*sin(th_min);
end_y=mid_y-110*cos(th_min);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y);//用红色画出分针
end_x=mid_x+140*sin(th_sec);
end_y=mid_y-140*cos(th_sec);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y);//同上,画出秒针,长为140
//画出钟盘上的刻度,刻度长20
line(140,240,160,240);//9点对应的大刻度
line(320,60,320,80);//12点对应的大刻度
line(500,240,480,240);//3点的刻度
line(320,420,320,400);//6点的刻度
line(410,395.7,400,378.4);//5点
line(475.7,330,458.4,320);//4点
line(475.7,150,458.4,160);//2点
line(410,84.3,400,101.6);//1点
line(230,84.3,240,101.6);//11点
line(164.3,150,181.6,160);//10点
line(164.3,330,181.6,320);//8点
line(230,395.7,240,378.4);//7点
sleep(BLUE);//这里应该是打错,停止一秒,应为sleep(1000)
cleardevice();//清除屏幕上的显示
}
closegraph();//关闭VGA屏幕,即返回文本方式
return0;
}
⑶ 提问a,b按钮按下,a启动c延时1秒启动。关闭时a立即关闭c延时2秒关闭,用c语言怎么写
你的描述不是非常清楚,这是按照我的理解给你写的代码
#include <stdio.h>
//按钮最终状态,按下为1,悬空为0
int key_a;
int key_b;
int key_c;
int main(int argc,char**argv)
{
int key_a_statu = key_a; //按钮的状态记录
int key_b_statu = key_b; //按钮的状态记录
int key_c_statu = key_c; //按钮的状态记录
while(1)
{
if(key_a_statu != key_a)//A状态变化
{
key_a_statu = key_a;//状态更新
if(key_a && key_b) //a,b同时启动
{
sleep(1);
key_c = 1; //C开启
}
if(!key_a)//a关闭
{
sleep(2);
key_c = 0; //C关闭
}
}
usleep(1000*20);
}
return 0;
}
⑷ 用c语言实现算法led0亮2秒,led1亮3秒,led1灭2秒,led0灭5秒程序
貌似是考多线程,你这里面没说明同步规则,就分开写吧:
void led0thread()
{
while(1)
{
led0.light();
Sleep(2000);
led0.turnoff();
Sleep(5000);
}
}
void led1thread()
{
while(1)
{
led0.light();
Sleep(3000);
led0.turnoff();
Sleep(2000);
}
}
⑸ C语言中,让4个流水灯全部亮灭,第一次时间间隔1秒,第二次0.5秒,第三次0.2秒
单片机吧
例如定义的是 P1口4个灯 就是
int LED1 = P1^0;
int LED2= P1^1;
int LED3 = P1^2;
int LED4 = P1^3;
LED1 = 0; 开启
delay(1秒)延时函数
LED1 = 1; 灭
delay(1秒)延时函数
LED2 = 0; 开启
delay(0.5秒)延时函数
LED2 = 1; 灭
delay(0.5秒)延时函数
LED3 = 0; 开启
delay(0.2秒)延时函数
LED3 = 1; 灭
delay(0.2秒)延时函数
你也可以 使用
P1= 0xfe;
delay()延时函数
P1= 0XFF;
以此类推
⑹ 共阳连接,用定时器t1让小的灭一秒亮两秒接到p1.2口上。求单片机C语言程序
可以这样做
光用定时器T1还不行,定不了1秒的时间。你得先用定时器T1产生20ms的定时中断,然后在用软件累计中断次数50次,即可实现1秒定时。而后按照此时间使用CPLP1.7指令即可!
⑺ 如何用C语言编写一个LED熄灭后延迟4秒后再亮1秒,再熄灭的程序,不用循环执行,
首先要将你的单片机或者dsp的时钟转化成1秒或者1毫秒,转换的方法很多最简单的就是分频,这样做了之后写一个简单的程序使得某个变量比如说M即时一秒之后将你接的那个引脚的电平拉高或清零,使得led亮一秒。看得你接法怎么接的。然后第二步就是M大于1的时候将led熄灭(电平高低看你的接法而定)然后将m的值大于5时请一次零就ok了
⑻ 单片机C语言数码管编写亮了后过几秒在灭呢
一般是1—2ms,for延时
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);//延时1ms
}
⑼ c语言控制一个led亮两秒,灭一秒
while(1)
{
LEDON;
Delay(2000);//延时2S
LEDOFF;
Delay(1000);//延时1S
}
程序大体就是这个样子。
⑽ C语言实现精确延时,实现类似sleep功能
这个可以
#include<stdio.h>
#include<time.h>
main()
{
void sleep(long wait);
int n;
printf("输入延时秒数:")
scanf("%d",&n);
sleep(n*1000);
printf("hello!");
return 0;
}
void sleep(long wait)
{
long goal=clock()+wait;
while(goal>clock());
}
送个定时器给你看看精确不,复制下面代码看看吧,看的时候请输入准确的时间格式时:分:秒
如果现在12::00,可以输入12:1:00测试下
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
main()
{
void sleep(long wait);
int h,m,s,sum;
char n[128];
time_t timer;
printf("输入准确时间格式(时:分:秒)\t");
scanf("%d:%d:%d",&h,&m,&s);
time(&timer);
tm* t=localtime(&timer);
sum=((h-(t->tm_hour))*3600+(m-(t->tm_min))*60+s-(t->tm_sec));
for(int i=sum,j=59;i>=1;i--,j--)
{
system("cls");
_strtime(n);
printf("%s\n",n);
for(int k=1;k<=j;k++)
{
printf(" ");
}
printf("This is a c program!");
sleep(1000);
}
system("cls");
_strtime(n);
printf("%s",n);
printf("\nGame over!\n");
return 0;
}
void sleep(long wait)
{
long goal=clock()+wait;
while(goal>clock());
}