int m,s; //m是分钟minutes,s是秒钟second printf("请输入倒计时时间:"); //输入提示 scanf("%d:%d",&m,&s); //键盘输入分钟和秒钟 //别忘了输入时分钟和秒钟之间还有一个“:” if(m < 0 || s < 0 || s >= 60) //判断数据是否有误 { //分钟秒钟不可能为负数,秒钟最大为59 printf("数据错误"); while(m >= 0) if(s == -1) //当秒钟s=0时 m = m-1; //分钟m退一 s = 59; //秒钟s回到59,从59重新倒计时 system("cls"); //清屏 printf("%d:",m); //输出分钟 if(s < 10) //如果秒钟小于10,前面补零 printf("0"); printf("%d",s); //输入秒钟 if(m == 0 && s == 0) //当倒计时完0:00停止运行 break; Sleep(1000); //暂停语句,S要大写,1000=1秒 s = s - 1; //秒钟s退一 return 0;
交通灯 设计 一. 设计 目的:00 1.进一步熟悉和掌握单片机的结构和工作原理。熟练掌握 C语言 的编程方法,将理论联 系到实践中,提高我们的思维能力。 2.用AT89C51的P1口作为输出口,控制12个发光二极管的点亮和熄灭,模拟交通灯管理 。 3.学习74LS245芯片驱动七段数码管的显示的方法,使用数码管显示器定时及 倒计时 的 方法。 二. 设计 要求与主要内容: 设计 要求:交通信号灯模拟控制系统 设计 利用单片机的定时器定时,令十字路口的红 绿灯交替点亮和熄灭,并且用LED数码管显示时间。用AT89C51的P1口作为输出口,控 制12个发光二极管的点亮和熄灭,模拟交通灯管理。在一个交通十字路口有一条主干 道(东西方向),一条从干道(南北方向),,四个路口安装红,黄,蓝,灯各一盏 。 1. 设计 一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向( 从干道)车道两条交叉道路上的车辆交替运行。 2.在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道。 3.东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用数码 管显示器进行显示(采用 倒计时 的方法)。 主要内容:假设一个十字路口为东西南北走向。初始状态为状态1,南北方向绿灯通车 ,东西方向红灯。经过过一段时间(25S)转换状态2,南北方向绿灯转亮黄灯,延时 5S,东西方向仍然红灯。再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段 时间(25S)转换到状态4,东西方向绿灯转亮黄灯,延时5S,南北方向仍然红灯。最 后循环至南北绿灯,东西红灯。在这些状态下,有时钟倒数计时。 设计 步骤: 1.利用Proteus 7 仿真软件按下列要求绘制仿真电路图 用12个发光二极管分别表示东、西、南、北四个方向的红、黄、绿灯; 用P1口输出控制模拟交通灯的状态使响应的发光二极管点亮或熄灭; 用P0口分别接74LS245芯片的A口,74LS245的B口分别接七段数码管的八位引脚,P2 .0、P2.1七段数码管的共阳极引脚; 2.利用Keil uVision3 编写 程序代码,编译生成.hex文件,将.hex文件导入仿真电路里的AT89C51芯 片中完成代码捆绑,在Proeus 7中运行观察结果。 三. 设计 程序原理: AT89C51的P1口接发光二极管,通过P1口输出控制发光二极管的亮、灭,进而模拟 显示出十字路口交通灯的各种状态,利用P0口和P1口作为字段的片选信号输出。74LS 245芯片的A、B口串行输出时间位送到七段数码管,从而驱动数码管显示各个状态倒计 时时间。 (1)仿真电路图如下图: (1-1) (2)程序流程图如下: (1-2) 四.程序代码: #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit P2_0=P2^0; //位定义 sbit P2_1=P2^1; uchar n=0,temp=0; uchar code segcode0[]={0x5b,0x06,0x3f,0x5b,0x06,0x3f,0x5b,0x06,0x3f}; uchar code segcode1[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f}; //部分位码表 void delay(x) //延时函数 { while(x--); } void time() interrupt 1 //定时 倒计时 函数 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; n++; temp=temp%61; if(n==20) { temp++; n=0; } if(temp<25) P1=0x21; if((temp>=25)&&(temp<28)) P1=0x22; if((temp>=28)&&(temp<30)) P1=0x24; if((temp>=30)&&(temp<55)) P1=0x0c; if((temp>=55)&&(temp<58)) P1=0x14; if((temp>=58)&&(temp<60)) P1=0x24; } main() //主函数 { uint i=0; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=1; while(1) { P2_0=0; P2_1=1; P0=segcode0[temp/10]; delay(3000); P2_0=1; P2_1=0; P0=segcode1[temp%10]; delay(3000); P2_1=1; } } 五.实验结果: 结
uchar PWM_t,PWM_t0; //PWM_t为脉冲宽度(0~100)时间为0~10ms uchar time_count; //定时计数 uint number,number1; uchar flag; //flag为小车状态标志,0:停止,1:前进,2:后退 uchar flag2; //flag2为小车状态恢复寄存区,当小车遇到障碍物停止,等到障碍物排除之后,小车在停止之前的状态就寄存在flag2中 uchar flag3; //flag3为小车避障停止延时标志,初始化为0,等待障碍排除之后赋值为1,开始计时,数秒之后恢复停止前的行进状态 uchar flag4; //--flag4为看门狗复位后状态恢复寄存区 uchar kind = 0; //传感器的种类 /******************************************************** *函数名称:void bizhang() *函数功能:遇到障碍物时的处理函数 *函数入口:无 *函数出口:无 ********************************************************/ void bizhang() zhang_ai = 1; if(zhang_ai == 0) flag2=flag; flag=0; while(zhang_ai == 0) keyboard(); xunji(); stop(); WDT_CONTR=0x3b; flag3=1; /******************************************************** *函数名称:void stop() *函数功能:到达目标点的控制函数 *函数入口:无 *函数出口:无 ********************************************************/ void stop() stop_1=1; //目标站点1 if(stop_1==0)flag=0; stop_2=1; //目标站点2 if(stop_2==0)flag=0; stop_3=1; //目标站点3 if(stop_3==0)flag=0; /******************************************************* *函数名称:void xunji() *函数功能:查询传感器反馈回来的路线状况,生成相应代码 *函数入口:无 *函数出口:无 ********************************************************/ void xunji() uchar jiekou; spy=0xff; if(flag==1) jiekou=spy&0x0f; switch(jiekou) /*****左转*****/ case 0x0d:kind=1;break; //0b0000 1101 case 0x0c:kind=2;break; //0b0000 1100 case 0x0e:kind=2;break; //0b0000 1110 /*****右转*****/ case 0x0b:kind=3;break; //0b0000 1011 case 0x07:kind=4;break; //0b0000 0111 case 0x03:kind=4;break; //0b0000 0011 case 0x00:flag=0;break; //0b0000 0000 default:kind=0;break; spy=0xff; if(flag==2) jiekou=spy&0xf0; switch(jiekou) /*****左转*****/ case 0xd0:kind=3;break; //Ob1101 0000 case 0xc0:kind=4;break; //0b1100 0000 case 0xe0:kind=4;break; //0b1110 0000 /*****右转*****/ case 0xb0:kind=1;break; //0b1011 0000 case 0x70:kind=2;break; //0b0111 0000 case 0x30:kind=2;break; //0b0011 0000 case 0x00:flag=0;break; //0b0000 0000 default:kind=0;break; /******************************************************* *函数名称:void delay() *函数功能:软件滤波,去抖动 *函数入口:无 *函数出口:无 ********************************************************/ void delay() uchar i,k; for(i=20;i>0;i--) static int phl_ready = 0; unsigned char buf[max_seq+1][270]; unsigned char ack[8]; //发送空的ack帧 unsigned char in_buf[600], last_buf[520];//接收时的缓冲区;去掉冗余之后的缓冲区,为防备因误码两帧合并为一帧而定义了很大一个数组 int nbuffered=0; //发送的帧数 int buf_size[max_seq+1]; //记下以发送各帧的帧长 int next_frame_to_send=0; int frame_in_phl=0; //用于成帧 int frame_expected=0; int ack_expected=0; int between(int a,int b,int c) if( ((a<=b)&&(b<c)) || ((c<a)&&(a<=b)) || ((b<c)&&(c<a)) ) return 1; else return 0; //判断帧尾,防止出现误判esc esc flag为数据的情况 int end_flag(int in_len) int count=0; int i; if(in_len=0;i--)//记录flag前的esc数目 count++; return count%2; //若flag前的esc为偶数,则为帧尾 }//成帧函数--数据帧 void send_frame(char *my_buf,int len) int n; buf[frame_in_phl][0]=(frame_expected+max_seq)%(max_seq+1); //ack buf[frame_in_phl][1]=frame_in_phl; //发送帧的帧号 for(n=0;n<len;n++) buf[frame_in_phl][n+2]=my_buf[n]; //将处理过的新帧赋值到缓冲区中 len=len+2; *(unsigned int *)(buf[frame_in_phl]+len) = crc32(buf[frame_in_phl],len); //在原始帧的基础上加检验和 buf_size[frame_in_phl]=len+4; //记录当前帧的长度,包括3个帧头,4个检验和 nbuffered=nbuffered+1; //缓冲区占用数加一 frame_in_phl=(frame_in_phl+1)%(max_seq+1); //成帧函数--ack帧 void send_ack() //ack帧的处理 ack[0]=(frame_expected+max_seq)%(max_seq+1); ack[1]=max_seq+10; //ack帧的序号位,使ack[1]==frame_expected恒不成立 *(unsigned int *)(ack+2) = crc32(ack,2); //在原始帧的基础上加检验和 //主函数 int main(int argc, char **argv) int event, arg, n , m , i , j , len = 0 ,in_len = 0; unsigned char my_buf[260]; int phl_wait=0; //在物理层中还没有被发送的帧 protocol_init(argc, argv); enable_network_layer(); for (;;) { event = wait_for_event(&arg); switch (event) { case NETWORK_LAYER_READY:
本文仅记录我自己瞎搞的东西,自己当做笔记看,如果偶然间您看到了本文,希望能博您一笑。 我是菜逼!我是菜逼!我是菜逼!我的单片机长这样:JD51单片机开发板(我也不知道为啥他为啥传上来就斜了)开发板原理图我初步写的程序:#include <reg52.h> #define uchar unsigned char #define uint unsigned ...
int count_down_time = 10; // 设置 倒计时 时间为 10 秒 time_t start_time, current_time; time(&start_time); // 记录程序开始时间 while (1) { time(&current_time); // 获取当前时间 int elapsed_seconds = difftime(current_time, start_time); // 计算已经过去的秒数 int remaining_seconds = count_down_time - elapsed_seconds; // 计算还剩余的秒数 if (remaining_seconds <= 0) { printf("Time's up!\n"); break; printf("Remaining time: %d\n", remaining_seconds); Sleep(1000); // 如果是 Windows 系统,可以使用 Sleep 函数暂停一秒钟 system("pause"); return 0; 这个程序会在控制台输出 倒计时 的剩余时间,直到时间到达指定时间为止。程序中使用了 time 函数获取当前时间,difftime 函数计算已经过去的时间,Sleep 函数暂停一秒钟,以及 system 函数在程序结束前暂停等待用户按下任意键。 CSDN-Ada助手: 非常棒的博客!绝对是许多人正在寻找的东西。为什么不继续分享你的Python技巧呢?我建议你写一篇博客,介绍如何用Python进行数据可视化。你可以分享常见的图表类型、代码示例和数据分析技巧,让读者能够快速理解如何利用Python创建美观的可视化结果。加油! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 数字改中文小写(含思路,python) CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java