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

📄 yijia.c

📁 一个大型洗衣设备晾衣架的光电控制系统的C51程序
💻 C
📖 第 1 页 / 共 2 页
字号:
     }

     s=0;
 }

 /*擦除操作,ax:地址*/
 void erase93(U8 ax)
 {
     char i;
     /* 前导条件  */
     c=0;
     d=0;
     s=0;
     s=1;
     d=1;
     c=0;
     c=1;
     /* 发送操作码  */
     d=1;
     c=0;
     c=1;
     c=0;
     c=1;
     /* 发送地址  */
     for(i=5;i>=0;i--)
     {
         d=(ax>>i) & 1;
         c=0;
         c=1;
     }

     /*启动擦除操作*/
     s=0;
     s=1;
     /*等待擦除操作结束*/
      while(q==0);
    /* delay();
     delay();    */
     s=0;
 }

 /*擦除全部操作*/

 void eraseall93(void)
 {
     char i;
     /* 前导条件  */
     c=0;
     d=0;
     s=0;
     s=1;
     d=1;
     c=0;
     c=1;
     /* 发送操作码  */
     d=0;
     c=0;
     c=1;
     c=0;
     c=1;

     d=1;
     c=0;
     c=1;
     /* 发送地址  */
     for(i=4;i>=0;i--)
     {
         d=0;
         c=0;
         c=1;
     }

     /*启动擦除操作*/
     s=0;
     s=1;
     /*等待擦除操作结束*/
      while(q==0);
   /*  delay();
     delay();  */
     s=0;
 }

 /*写全部操作*/
 void writeall93(U16 dx)
 {
     char i;
     eraseall93();

     /* 前导条件  */
     c=0;
     d=0;
     s=0;
     s=1;
     d=1;
     c=0;
     c=1;
     /* 发送操作码  */
     d=0;
     c=0;
     c=1;
     c=0;
     c=1;

     c=0;
     c=1;
     /* 发送地址  */
     for(i=4;i>=0;i--)
     {
         d=1;
         c=0;
         c=1;
     }
     /* 发送数据  */
     for(i=15;i>=0;i--)
     {
         d=(dx>>i) & 1;
         c=0;
         c=1;
     }
     /*启动写操作*/
     s=0;
     s=1;
     /*等待写操作结束*/
     while(q==0);
   /*  delay();
     delay();  */
     s=0;
 }

 /*

  void Ewen(void) {
 unsigned char temp,InData;
 CS=0;
 SK=0;
 CS=1;
 InData=0x98; // 10011XXXX
 for(temp=9;temp!=0;temp--) { // 9
  DI=InData&0x80;
  SK=1; SK=0;
  InData<<=1;
 }
 CS=0;
}

// Disables all programming instructions.
void Ewds(void) {
 unsigned char temp,InData;
 CS=0;
 SK=0;
 CS=1;
 InData=0x80; // 10000XXXX
 for(temp=9;temp!=0;temp--) { // 9
  DI=InData&0x80;
  SK=1; SK=0;
  InData<<=1;
 }
 CS=0;
}

// Reads data stored in memory, at specified address.
unsigned int Read(unsigned char address) {
 unsigned char temp;
 unsigned int result;
 Ewen();
 SK=0; DI=1; // 110 A5-A0
 CS=0; CS=1;
 SK=1; SK=0;   // 1
 address=address&0x3f|0x80;
 for(temp=8;temp!=0;temp--) { // 8
  DI=address&0x80;
  SK=1; SK=0;
  address<<=1;
 }
 DO=1;
 for(temp=16;temp!=0;temp--) { // 16
  SK=1;
  result=(result<<1)|DO;
  SK=0;
 }
 CS=0;
 Ewds();
 return(result);
}

// Writes memory location An - A0.
void Write(unsigned char address,unsigned int InData) {
 unsigned char temp;
 Ewen();
 SK=0; DI=1; // 101 A5-A0
 CS=0; CS=1;
 SK=1; SK=0;   // 1
 address=address&0x3f|0x40;
 for(temp=8;temp!=0;temp--) { // 8
  DI=address&0x80;
  SK=1; SK=0;
  address<<=1;
 }
 for(temp=16;temp!=0;temp--) { // 16
  DI=InData&0x8000;
  SK=1; SK=0;
  InData<<=1;
 }
 CS=0; DO=1;
 CS=1; SK=1;
 while(DO==0) {   // busy test
  SK=0; SK=1;
 }
 SK=0; CS=0;
 Ewds();
}

/*
// Erase memory location An - A0.
void Erase(unsigned char address) {
 unsigned char temp;
 Ewen();
 SK=0; DI=1; // 111 A5-A0
 CS=0; CS=1;
 SK=1; SK=0;   // 1
 address|=0xc0;
 for(temp=8;temp!=0;temp--) { // 8
  DI=address&0x80;
  SK=1; SK=0;
  address<<=1;
 }
 CS=0; DO=1;
 CS=1; SK=1;
 while(DO==0) {
  SK=0; SK=1;
 }
 SK=0; CS=0;
 Ewds();
}

// Erases all memory locations. Valid only at VCC = 4.5V to 5.5V.
void Eral(void) {
 unsigned char temp,InData;
 Ewen();
 CS=0;
 SK=0;
 CS=1;
 InData=0x90; // 10010XXXX
 for(temp=9;temp!=0;temp--) { // 9
  DI=InData&0x80;
  SK=1; SK=0;
  InData<<=1;
 }
 CS=0; DO=1;
 CS=1; SK=1;
 while(DO==0) {
  SK=0; SK=1;
 }
 SK=0; CS=0;
 Ewds();
}

// Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
void Wral(unsigned int InData) {
 unsigned char temp,address;
 Ewen();
 CS=0;
 SK=0;
 CS=1;
 address=0x88; // 10001XXXX
 for(temp=9;temp!=0;temp--) { // 9
  DI=address&0x80;
  SK=1; SK=0;
  address<<=1;
 }
 for(temp=16;temp!=0;temp--) { // 16
  DI=InData&0x8000;
  SK=1; SK=0;
  InData<<=1;
 }
 CS=0; DO=1;
 CS=1; SK=1;
 while(DO==0) {
  SK=0; SK=1;
 }
 SK=0; CS=0;
 Ewds();
}

















 /*初始化子程序  */

void ch451_init()
{
  ch451_din=0;                                     /*先低后高,选择4线输入  */
  ch451_din=1;
  ch451_write(CH451_SYSON2);      /*设定系统参数:010000000[wdog][keyb][disp]B关看门狗、键盘扫描使能、显示驱动使能 */
  ch451_write(CH451_USER); /*设定显示参数:0101[mode][limit,3bits][intensity,4bits]B, BCD译码、扫描极限为4、显示亮度为最亮*/
#ifdef USE_KEY
  IT1=0;			                  /*设置下降沿触发 */
  IE1=0;			                  /*清中断标志    */
  PX1=0;			                  /*设置低优先级  */
  EX1=1;			                  /*开中断        */
#endif

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

 /*输出命令子程序
 定义一无符号整型变量存储12字节的命令字。  */
 void ch451_write(U16 command)
{
  U8 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读一字节   */

 U8 ch451_read()
{
  U8 i;
  U8 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,寄存器组2                        */

void ch451_inter() interrupt 2 using 2
{
  U8 i;			      /*定义循环变量            */
  U8 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;                                    /*清中断标志 */

  kf=1;
}

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

#endif

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

/************************************************/
/*void main(){
   uchar a,b,c,d;
   d=0;
   ch451_init();                                  //调用初始化
   ch451_write(0x403);
   ch451_write(0x580);                           //测试送入命令
   ch451_write(CH451_DIG0|0X01);                 //最低位显示1
   EA=1;
   ch451_key=0x0ff;
   while(1){
    while(ch451_key==0xff);	                //等待中断
    a=ch451_key;
    d=a;
    ch451_key=0x0ff;
    ch451_write(0x300);		              //左移两位
    ch451_write(0x300);
    a&=0x3f;			             //显示十进制数据
    b=a;
    a/=10;
    ch451_write(CH451_DIG1|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 + -