flag 是一个结构体,它的每一个变量只占用1个位,这样可以节省空间,尤其是在嵌入式开发中。这种优化是很有必要的。
struct flag
{
unsigned time_1s:1;
unsigned key_scan:1;
unsigned task_time:1;
unsigned task_en:1;
unsigned run_flag:1;
}
flag1; //定义了一个结构体变量flag1。
void out_time(void)
{
if(flag1time_1s==1)//如果结构体变量的成员变量time_1s为1则执行
{
flag1time_1s=0; //就是清除一个标志
if(flag1run_flag==1) //后面的都是变量标志的处理。
{
if(step_cont>=8)
{
step_cont=0;
}
if(step_cont==0)
{
run_cont[0]=0;
run_cont[1]++;
dsp_buf[4]=LED_TAP[step_cont];
dsp_buf[5]=LED_TAP2[step_cont];
dsp_buf[0]=(run_step_time[step_cont]-cont)/10;
dsp_buf[1]=(run_step_time[step_cont]-cont)%10; //这些 *** 作是分离一个整数的个位和十位
dsp_buf[9]=(run_step_time[step_cont]-cont)/10; //具体要看其他程序
dsp_buf[8]=(run_step_time[step_cont]-cont)%10;
dsp_buf[2]=((set_cont-cont_set_b)-run_cont[1])/10;
dsp_buf[3]=((set_cont-cont_set_b)-run_cont[1])%10;
dsp_buf[6]=((set_cont-cont_set_b)-run_cont[1])/10;
dsp_buf[7]=((set_cont-cont_set_b)-run_cont[1])%10;
}
}
if(cont==run_step_time[step_cont])
{
step_cont++;
cont=0;;
}
cont++;
}
XOR AX,AX ;清空AX
MOV CX,0AH ;将A赋给CX
JCXZ NEXT ;cx为零时跳到next
AGAIN: ADD AX,CX ;CX+Ax-》AX
LOOP AGAIN ;跳回again
NEXT: …
因为cx永远不为零,看起来是个死循环。。
:
建议用结构体链表,不过全局变量也行,反正不大,没记忆功能无所谓
(1)必须要有 年份变量、月份变量、日期变量、星期变量、闰年标识
(2)必须要有 年份、月份、闰年标志以及日期临时变量、星期临时变量
:
(1)判断年份输入是否正确y>0&&y<=2011?对的继续,错的重输
(2)判断月份输入是否正确m>0&&m<13?对的继续,空的直接转到输出一年日历,错的重输
(3)判断日起输入是否正确d>0&&d<32?错的重输,对的继续判断
if(m!=2){
if((m==4||m==6||m==9||m==11))&&d>30)printf(错误重输)
}
else{
if(y不是闰年&&d>28) printf(错误重输)
else i=1;//这个i应该是闰年标志flag把
}
(4)计算星期几
(5)循环输出
while(需要输出整年日历&&没有输出完毕){
输出当月日历;
月份++;
最后一天是30?31?28?29?确定;
第一天是星期几确定(以及前面空几格);
}
:
(1)年月日判断
(2)星期判断
(3)日历循环输出
分开来是因为这样干净看得清楚,全放在一块儿,到时候有很多重复的程序段,调试起来你会崩溃的……
注意:
(1)注意题目要求,输入年份就要输出一年份的日历,就是说你在判断月份的时候是不是还要加个空条件判断?用int 的话最好先全初始化为0,不然不好判断。
(2)后边那个while(1);一点用都没有,这程序是你写的还是程序改错题要你改的?
以上就是关于请高手帮我解读一下单片机程序段(1),搞了一天没搞明白,急!全部的内容,包括:请高手帮我解读一下单片机程序段(1),搞了一天没搞明白,急!、解读下列程序段实现的整体功能:XOR AX,AX MOV CX,0AH JCXZ NEXT AGAIN: ADD AX,CX LOOP AGAIN NEXT: …、求解读并修改程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)