sinat_30115123 2016-12-07 07:34 采纳率: 0%
浏览 2010

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

#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条回答

  • shen_wei 2016-12-07 08:14
    关注
     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;
            }
        }
    }
    

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

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料