资源简介

本设计是按键数码管显示proteus仿真和C程序,本设计是按键数码管显示proteus仿真和C程序,本设计是按键数码管显示proteus仿真和C程序

资源截图

代码片段和文件信息

 #include 


#define DATAP0 P0 //定义数据端口 
#define KeyPort  P3

sbit LOCK1=P2^0;//定义数码管锁存使能端口 
     

unsigned char code mcuend_DuanMa[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71};// 显示段码值0~F

unsigned char TempData[8]; //存储显示值的全局变量

void DelayUs2x(unsigned char t);//us级延时函数声明 
void DelayMs(unsigned char t); //ms级延时
void Display(unsigned char FirstBitunsigned char Num);//数码管显示函数
unsigned char KeyScan(void);//键盘扫描
unsigned char KeyPro(void);
void Init_Timer0(void);//定时器初始化
/*
                    主函数
*/
void main (void)
{
unsigned char numi;                  
unsigned char temp[8];
Init_Timer0();

while (1)         //主循环
  {
  num=KeyPro();
  if(num!=0xff)
     {
       temp[i]=mcuend_DuanMa[num];
   TempData[i]=temp[i];
     }
  
  }
}
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
 DelayUs2x(245);
 }
}
/*------------------------------------------------
 显示函数,用于动态扫描数码管
 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
 如输入0表示从第一个显示。
 Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBitunsigned char Num)
{
      static unsigned char i=0;
  

   DATAP0=0;   //清空数据,防止有交替重影
       LOCK1=1;     //段锁存
       LOCK1=0;

       DATAP0=TempData[i]; //取显示数据,段码
       LOCK1=1;     //段锁存
       LOCK1=0;
       
   i++;
       if(i==Num)
      i=0;


}
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;   //使用模式1,16位定时器,使用“|“符号可以在使用多个定时器时不受影响      
 //TH0=0x00;       //给定初值
 //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 TH0=(65536-2000)/256;   //重新赋值 2ms
 TL0=(65536-2000)%256;
 
 Display(08);       // 调用数码管扫描

}

/*------------------------------------------------
        按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void)  //键盘扫描函数,使用行列逐级扫描法
{
 unsigned char Val;
 KeyPort=0xf0;//高四位置高,低四位拉低
 if(KeyPort!=0xf0)//表示有按键按下
   {
    DelayMs(10);  //去抖
if(KeyPort!=0xf0)
  {           //表示有按键按下
     KeyPort=0xfe; //检测第一行
if(KeyPort!=0xfe)
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-28 16:59  lab2\
     文件        6467  2018-05-28 16:43  lab2\lab_digital pipe
     文件        5040  2018-05-28 16:43  lab2\lab_digital pipe.c
     文件      106211  2018-05-28 16:59  lab2\lab_digital pipe.DSN
     文件        1905  2018-05-28 16:43  lab2\lab_digital pipe.hex
     文件          64  2018-05-28 16:43  lab2\lab_digital pipe.lnp
     文件        9733  2018-05-28 16:43  lab2\lab_digital pipe.LST
     文件       11022  2018-05-28 16:43  lab2\lab_digital pipe.M51
     文件        7429  2018-05-28 16:43  lab2\lab_digital pipe.OBJ
     文件         826  2018-05-28 16:43  lab2\lab_digital pipe.plg
     文件        1052  2018-05-28 16:59  lab2\lab_digital pipe.PWI
     文件       55250  2018-05-28 16:56  lab2\lab_digital pipe.uvopt
     文件           0  2018-05-28 16:25  lab2\lab_digital pipe.uvproj
     文件           0  2018-05-28 16:25  lab2\lab_digital pipe_uvproj.bak
     文件       92033  2018-05-27 16:38  lab2\Last Loaded lab_digital pipe.DBK

评论

共有 条评论