找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1016|回复: 5
收起左侧

关于单片机keil工程码 求帮助

[复制链接]
ID:370267 发表于 2018-7-18 21:57 | 显示全部楼层 |阅读模式
请问用这个图编写keil工程代码,使用外部中断和定时器知识,实现gif图中的功能:按键第一次按下,数码管数值自动每秒加一(按16进制从0加到F),加到F自动清零。用按键接到外部中断0的引脚(P3^2),用外部中断控制计数开启/停止。另外,在计数时,LED亮,计数停止时LED灭。
0AJTL9{)0@]0QL6A9JDHO]A.png
回复

使用道具 举报

ID:370267 发表于 2018-7-21 20:21 | 显示全部楼层
laisinanshi 发表于 2018-7-21 15:18
#include"reg51.h"
#define m P0
typedef unsigned int u16;          //对数据类型进行声明定义

谁帮我看看这有啥问题啊
回复

使用道具 举报

ID:370267 发表于 2018-7-21 15:18 | 显示全部楼层
#include"reg51.h"
#define m P0
typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
u8 i=0,k=0,j=0,T;
sbit led=P2^5;
sbit anjian=P3^2;
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

void delay1ms()   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

void  display()
{
        led=0;
        while(j<16)
        {
                P0=smgduan[j];
                delay1ms();
                if(i==15)
                        {
                                i=0;
                                j++;
                        }
        }
//        delay1ms();
}
void kk()
{
        if(anjian==0)
        {
                delay1ms();
                if(anjian==0)
                {
                        TR0=!TR0;
                        while(anjian==0)
                                display();
                }
        }
}
void zhongduan()
{
        TMOD=0x01;
    TH0=0x3c;
    TL0=0xb0;    //定时50ms
        //设置INT0
//        IT0=1;//跳变沿出发方式(下降沿)
//        EX0=1;//打开INT0的中断允许。
       
        //设置INT1
        TR1=1;
        ET1=1;       
        EA=1;//打开总中断       

}
/*
void Int0()        interrupt 0                //外部中断0的中断函数
{
        delay1ms();         //延时消抖
        while(1)
        {
                kk();
        }
}
*/
void main()
{
        zhongduan();
        P0=smgduan[0];
        while(1)
        {
        //        display();
                kk();

        }
}

void timer_0() interrupt 1         //定时器中断函数  
{
    TH0=0x3c;
    TL0=0xb0;    //定时50ms          
        k++;
        if(k==20)
        {
                i++;
                k=0;
        }
}

回复

使用道具 举报

ID:370267 发表于 2018-7-21 15:17 | 显示全部楼层
#include"reg51.h" #define m P0 typedef unsigned int u16;          //对数据类型进行声明定义 typedef unsigned char u8; u8 i=0,k=0,j=0,T; sbit led=P2^5; sbit anjian=P3^2; u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值  void delay1ms()   //误差 0us {     unsigned char a,b,c;     for(c=1;c>0;c--)         for(b=142;b>0;b--)             for(a=2;a>0;a--); }  void  display() {         led=0;         while(j<16)         {                 P0=smgduan[j];                 delay1ms();                 if(i==15)                         {                                 i=0;                                 j++;                         }         } //        delay1ms(); } void kk() {         if(anjian==0)         {                 delay1ms();                 if(anjian==0)                 {                         TR0=!TR0;                         while(anjian==0)                                 display();                 }         } } void zhongduan() {         TMOD=0x01;     TH0=0x3c;     TL0=0xb0;    //定时50ms         //设置INT0 //        IT0=1;//跳变沿出发方式(下降沿) //        EX0=1;//打开INT0的中断允许。                  //设置INT1         TR1=1;         ET1=1;                 EA=1;//打开总中断          } /* void Int0()        interrupt 0                //外部中断0的中断函数 {         delay1ms();         //延时消抖         while(1)         {                 kk();         } } */ void main() {         zhongduan();         P0=smgduan[0];         while(1)         {         //        display();                 kk();          } }  void timer_0() interrupt 1         //定时器中断函数   {     TH0=0x3c;     TL0=0xb0;    //定时50ms                   k++;         if(k==20)         {                 i++;                 k=0;         } }
回复

使用道具 举报

ID:344053 发表于 2018-7-19 00:49 来自手机 | 显示全部楼层
这种网上找一个数码管显示和中断式例自己改,一般没人帮你一下写好,不过可以帮忙修改错误。
回复

使用道具 举报

ID:1 发表于 2018-7-18 22:09 | 显示全部楼层
不要发求程序的帖子,根据经验,一般不会有人回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表