⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo451.c

📁 lyd-sy-5100单片机开发板的示例程序 分为C语言版本和ASM汇编版本。其他牌子的板子也可以使用其C语言版本。
💻 C
字号:
/*******************************************************************************
*  标题:  蓝海微芯LJD-SY-5100单片机开发系统演示程序                            *
*  文件:  CH451.C                                                              *
*  日期:  2005-7-4                                                             *
*  版本:  1.0                                                                  *
*  作者:  蓝海微芯                                                             *
*  网站: http://www.bluemcu.com                                               *
********************************************************************************
*  描述:                                                                       *
*              数码管循环显示0~9的数字                                         *     
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.ljd-2008.com    All Rights Reserved *          
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#define CH451_RESET     0x0201                           //复位
#define CH451_LEFTMOV   0x0300		            //设置移动方式-作移
#define CH451_LEFTCYC   0x0301		            //设置移动方式-左循
#define CH451_RIGHTMOV  0x0302		            //设置移动方式-右移
#define CH451_RIGHTCYC  0x0303		            //设置移动方式-右循	
#define CH451_SYSOFF    0x0400                      //关显示、键盘、看门狗
#define CH451_SYSON1    0x0401                      //开显示
#define CH451_SYSON2    0x0403                      //开显示、键盘
#define CH451_SYSON3    0x0407                      //开显示、键盘、看门狗功能
#define CH451_DSP       0x0500                      //设置默认显示方式
#define CH451_BCD       0x0580                      //设置BCD译码方式
#define CH451_TWINKLE   0x0600		            //设置闪烁控制
#define CH451_DIG0      0x0800                      //数码管位0显示
#define CH451_DIG1      0x0900		            //数码管位1显示 
#define CH451_DIG2      0x0a00		            //数码管位2显示
#define CH451_DIG3      0x0b00		            //数码管位3显示
#define CH451_DIG4      0x0c00		            //数码管位4显示
#define CH451_DIG5      0x0d00	                    //数码管位5显示	
#define CH451_DIG6      0x0e00	                    //数码管位6显示	
#define CH451_DIG7      0x0f00		            //数码管位7显示
#include <reg51.h>

//如果使用键盘中断请定义
#define  USE_KEY  1
#define  uchar unsigned char
//须主程序定义的参数
 sbit   ch451_load=P1^2; 
 sbit   ch451_din=P1^0;
 sbit   ch451_dclk=P1^1;                          //串行数据时钟上升延激活
 	                                       // 串行数据输出,接CH451的数据输入
                                          //串行命令加载,上升延激活
 sbit   ch451_dout=P3^3;                        //INT1,键盘中断和键值数据输入,接CH451的数据输出
 uchar  ch451_key;		                // 存放键盘中断中读取的键值



//*************************************************
 //延时程序
 void delay(){					//在12P下延时十毫秒
   uchar i,j,k;
   for(i=0;i<10;i++)
     for(j=0;j<60;j++)
       for(k=0;k<120;k++);
  }

//初始化子程序

void ch451_init()
{ P1=0x60;
  
  ch451_din=0;
  ch451_dclk=1;                                     //先低后高,选择4线输入
  ch451_din=1;
  ch451_load=1;
  ch451_dout=1;
#ifdef USE_KEY
  IT1=0;			                  //设置下降沿触发
  IE1=0;			                  //清中断标志
  PX1=0;			                  //设置低优先级
  EX1=1;			                  //开中断
#endif

}
//*****************************************************

 //输出命令子程序
 //定义一无符号整型变量存储12字节的命令字。
 void ch451_write(unsigned int command)
{
  unsigned char i;
#ifdef USE_KEY
  EX1=0;			                 //禁止键盘中断
#endif	
  ch451_load=0;                                  //命令开始       
  for(i=0;i<12;i++){                             //送入12位数据,低位在前
    ch451_din=command&1;				
    ch451_dclk=0;
    command>>=1;
    ch451_dclk=1;                               //上升沿有效
  }
  ch451_load=1;                                 //加载数据
#ifdef USE_KEY
  EX1=1;
#endif
}

#ifdef USE_KEY

//*************************************************
//输入命令子程序,MCU从451读一字节
 unsigned char ch451_read()
{
  unsigned char i;
  unsigned char command,keycode;		//定义命令字,和数据存储器
  EX1=0;			               //关中段	
  command=0x07;			               //输入读451命令字	
  ch451_load=0;
  for(i=0;i<4;i++){
 
    ch451_din=command&1;		      //送入最低位
    ch451_dclk=0;			 
    command>>=1;			      //往右移一位
    ch451_dclk=1;			      //产生时钟上升沿锁通知CH451输入位数据
 }
  ch451_load=1;				      //产生加载上升沿通知CH451处理命令数据
  keycode=0;				      //清除keycode
  for(i=0;i<7;i++){
    keycode<<=1;			      //数据移入keycode,高位在前,低位在后
    keycode|=ch451_dout;		      //从高到低读入451的数据
    ch451_dclk=0;			      //产生时钟下升沿通知CH451输出下一位
    ch451_dclk=1;
 }
  IE1=0;				      //清中断标志
  EX1=1;
  return(keycode);			     //反回键值
}
//*************************************************
//中断子程序  使用中断2,寄存器组1

void ch451_inter() interrupt 2 using 1
{
  unsigned char i;			      //定义循环变量
  unsigned char command,keycode;	      //定义控制字寄存器,和中间变量定时器
  command=0x07;				      //读取键值命令的高4位0111B
  ch451_load=0;				      //命令开始
  for(i=0;i<4;i++){
    ch451_din=command&1;		     //低位在前,高位在后
    ch451_dclk=0;
    command>>=1;			     //右移一位
    ch451_dclk=1;			     //产生时钟上升沿锁通知CH451输入位数据
 }
  ch451_load=1;				     //产生加载上升沿通知CH451处理命令数据
  keycode=0;				     //清除keycode
  for(i=0;i<7;i++){
    keycode<<=1;			     //数据作移一位,高位在前,低位在后
    keycode|=ch451_dout;		     //从高到低读入451的数据
    ch451_dclk=0;			     //产生时钟下升沿通知CH451输出下一位
    ch451_dclk=1;
 }
  ch451_key=keycode;			    //保存上次的键值
  IE1=0;				    //清中断标志
}

//***********************************************

#endif 


//************************************************
void main(){
   uchar a,b,c,d;
   d=0;
   ch451_init();                                  //调用初始化
   ch451_write(0x403);
   ch451_write(0x580);                           //测试送入命令
   //ch451_write(CH451_DIG0|0X01);                 //最低位显示1
   //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   //while(1)
   //{
   ch451_write(CH451_DIG0|0x00);
   delay();
   ch451_write(0x301);
   ch451_write(CH451_DIG0|0x01);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x02);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x03);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x04);
   delay();
   ch451_write(0x300);

   ch451_write(CH451_DIG0|0x05);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x06);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x07);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x08);
   delay();
   ch451_write(0x300);
   ch451_write(CH451_DIG0|0x09);
   delay();
   ch451_write(0x300);
   //ch451_write(0x600);
   //}
   //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   
   
    	                //等待中断
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    a=ch451_key;
	ch451_key=0x0ff;
	a&=0x3f;
    b=a;
    a/=10;
    ch451_write(CH451_DIG1|a);
    b%=10;
    ch451_write(CH451_DIG0|b);
     delay();
    delay();
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/	
	
    a=ch451_key;
    d=a;
    ch451_key=0x0ff;
    ch451_write(0x300);		              //左移两位
    //ch451_write(0x300);
    a&=0x3f;			             //显示十进制数据
    b=a;
    a/=10;
    ch451_write(CH451_DIG0|a);
    b%=10;
    ch451_write(CH451_DIG0|b);
     delay();
     c=ch451_read();
     //while(c==d)		           //测试按键是否释放
     //{
      //ch451_write(CH451_DIG0|b|0x80);
      //delay();
      //c=ch451_read();
     //}
    //ch451_write(CH451_DIG0|b);*/
 }
 //}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -