能帮我分析一个单片机程序吗?谢谢 新人上路 所以没有悬赏 各位见谅

#include
#include
#define uchar unsigned char
#define uint unsigned int
uintCON8279=0xCfE9;//8279控制口地址
uintDATA8279=0xCfE8;//8279数据口地址
uchar LED[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};段码表0~9
uchar code
keyval[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x10,0x11,0x12,0x13,0x18,0x19,0x1a,0x01b};
uchar code
SEG[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
uchar i;
unit k,r=0;
int a;
void init_8279()
{
XBYTE[CON8279]=0x00;//设置9279工作方式
XBYTE(CON8279)=0xD1;//清除8279显示
while(XBYTE[CON8279]&0x80);//等待清除结束
XBYTE[DATE8279]=0x34;//设置8279分频系数
}
uchar ReadKey()
{
if(XBYTE[0xCFE9]&0x07){ //是否有按键按下
XBYTE[0xCEF9]=0x40;
i=XBYTE[0xCFE8];//读键值
}
return 0;
void Display(uchar y)
{
XBYTE[0xCFE9]=0x80;
XBYTE[0xCFE8]=SEG[y];
}
void delay() //延时
{
for(k=0;k {};
}
void delay(uint tem) //延时
{
uint ii,jj;
for(ii=0;ii {
for(jj=0;jj }
}
Int Display10() //十秒倒计时
{
a=0;
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[1];
XBYTE[DATE8279]=LED[0];
init_8279();
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[0];
for(i=9;i>=0;i--){
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[i];
if(XBYTE[oxCFE9]&0x07)
break;
delay1(900);
}delay1(900);if(i<=1)
a=1;
return a;
}
void Dispaly60() //六十秒倒计时
{
int i,j;
r=0;
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[1];
XBYTE[DATE8279]=LED[0];
init_8279();
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[6];
XBYTE[DATE8279]=LED[0];
delay1(1000);
XBYTE[CON8279]=0x90;
for(k=5;k>=0;k--){
XBYTE[CON8279]=0x90;
XBYTE[DATE8279]=LED[k];
XBYTE[DATE8279]=LED[i];
if(r==1)break;
delay1(900);
}
}
}
void jianpan(){
Display(0);
}
void main(){
EX0=1;
IT0=1;
EA=1;
loop:
init_8279();
while(1){
jianpan();
while(XBYTE[0xCFE9]&0x07)
{
jianpan():
ReadKey();
i=i-191;
while(i==9)
{
Display10();
if(a==1){jianpan();P1=0xfe;a=0;goto loop;}else
break;}
ReadKey();
i=i-191;
Display(i);
delay1(2000);
Diaplay60();
r=0;
goto loop;
}
}
}
int interruptEx0()interrupt 0
{
r=1;
}

将键盘的KA10至KA12分别连接到8279的KA0至KA2;键盘的RL10至RL17接8279上午RL0至RL7;键盘的SHIFT1、CTRL;单脉冲输出端P+接单片机仿真版上的INTO(注释:按一下左下角的蓝色按钮PULSE,则产生一次下降沿,激活中断。)

1个回答

 void main()
{
    EX0=1; //寄存器配置
    IT0=1;
    EA=1;
loop:
    init_8279(); //初始化8279
    while(1){
        jianpan();
        while(XBYTE[0xCFE9]&0x07)
        {
            jianpan():
        ReadKey();  //读取按键信息
        i=i-191;
        while(i==9)
        {
            Display10(); //10秒倒计时
            if(a==1){jianpan();P1=0xfe;a=0;goto loop;}else
                break;}
        ReadKey();
        i=i-191;
        Display(i); 
        delay1(2000); 
        Diaplay60(); //60秒倒计时
        r=0;
        goto loop;
        }
    }
}

代码都是配置硬件的。。具体的看里面的配置值。。

sinat_30115123
sinat_30115123 回复人类新纪元开始了: 求求大神救救我,感激不尽![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)[图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)
接近 3 年之前 回复
sinat_30115123
sinat_30115123 回复人类新纪元开始了: 就是我们课程设计 明天老师就要全面讲解这个程序 细到每个数据 ,每个语句,我很多都不会啊
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!