一个简单的单片机c语言编程问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 02:50:45
① 通过加入若干语句,对mg及ms变量进行控制,实现每当一秒钟到来时mg自动加1;当mg=10(即经历10秒钟)时mg自动清零,同时ms自动加1;当ms=2(即经历20秒)时ms自动清零,最终实现标准时间的秒信息显示(mg及ms变量通过串行口送出,经串并转换后至数码管显示)。
② 当秒钟为“20”时清零的同时控制P1.0上的LED点亮3秒钟。

当这个题目时 编程为
#include <AT89X51.H>

//********数码管段代码表(共阴且高位接a,低位接h笔段)**********//
unsigned char code Tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00};

unsigned char mg=0,ms=0,bittime=0;

//串口发送子程序//
void display(void)
{
TI=0; SBUF=Tab[ms]; while(!TI);
TI=0; SBUF=Tab[mg]; while(!TI);
}

//定时中断服务程序
void timer0 (void) interrupt 1 using 0
{
TH0=0x3c; TL0=0xb0; bittime++;
while(bittime==40)
{
bittime=0;
mg++;
if(mg==10)
{mg=0;
ms=ms+1;}
if(ms==2)
{mg=0;ms=0;P1_0=0;}
if(mg==3)
{P1_0=1;}

display();
//每经一秒调用一次显示程序(Fosc=24MHz)
}
}
//主程序
void mai

设一个全局变量,表示现在的状态(计数/3秒等待)
unsigned char state = 0;
中断函数里分两种情况,计数的状态下正常计数20秒,20秒到的时候状态转变,等待的状态下等待3秒,3秒到的时候状态转变