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(¤t_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)
CSDN-Ada助手: