📄 hclcd.lst
字号:
517 3 k--;
518 3 }
519 2 }
520 1 }
521 //6*12点阵的ASC码显示程序
522 void ASC12disp(Uchar Nowrow,Uchar Nowcol,Uchar ASCplace)
523 {
524 1 Uchar i,tmp1,tmp2,k=6;
525 1 Uint j;
526 1 j = ASCplace*12;
527 1 if((Nowrow%2)==0) //
528 1 {
529 2 switch(Nowrow)
530 2 {
531 3 case 0: i=0;break;
532 3 case 2: i=3;break;
533 3 default: i=6;
534 3 }
535 2 while(k!=0)
536 2 {
537 3 if(Nowcol<0x40)
538 3 {CS1=0;CS2=1;}
539 3 else
540 3 { if(Nowcol<0x80)
541 4 {CS1=1;CS2=0;}
542 4 else
543 4 {break;}
544 4 }
545 3 lcdwrite_cmd(i|0xb8);
546 3 lcdwrite_cmd(Nowcol|0x40);
547 3 lcdwrite_dat(ASC12[j]);
548 3 lcd_busy();
549 3 lcdwrite_cmd((i+1)|0xb8); //到下一页
550 3 lcdwrite_cmd(Nowcol|0x40);
C51 COMPILER V7.06 HCLCD 09/24/2008 15:03:44 PAGE 10
551 3 tmp1 = lcdread_dat();
552 3 lcdwrite_cmd(Nowcol|0x40);
553 3 lcdwrite_dat((ASC12[j+6]&0x0f)|(tmp1&0xf0));
554 3 j++;
555 3 Nowcol++;
556 3 k--;
557 3 }
558 2 }
559 1 else
560 1 {
561 2 switch(Nowrow)
562 2 {
563 3 case 1: i=1;break;
564 3 default: i=4;
565 3 }
566 2 while(k!=0)
567 2 {
568 3 if(Nowcol<0x40)
569 3 {CS1=0;CS2=1;}
570 3 else
571 3 {
572 4 if(Nowcol<0x80)
573 4 {CS1=1;CS2=0;}
574 4 else
575 4 {break;}
576 4 }
577 3 lcdwrite_cmd(i|0xb8);
578 3 lcdwrite_cmd(Nowcol|0x40);
579 3 tmp1=lcdread_dat();
580 3 tmp1=tmp1&0x0f;
581 3 tmp1=(ASC12[j]<<4)|tmp1;
582 3 tmp2=(ASC12[j+6]<<4)|(ASC12[j]>>4);
583 3 lcdwrite_cmd(Nowcol|0x40);
584 3 lcdwrite_dat(tmp1);
585 3 lcd_busy();
586 3 lcdwrite_cmd((i+1)|0xb8);
587 3 lcdwrite_cmd(Nowcol|0x40);
588 3 lcdwrite_dat(tmp2);
589 3 j++;
590 3 Nowcol++;
591 3 k--;
592 3 }
593 2 }
594 1 }
595
596
597
598
599
600 //以动画的形式显示公司的标志,入口为在水平的第几个位置,现把它做,从32到1,由2张32X16的图组成
601 void flashlogo(Uchar Bmpcol)
602 {
603 1 Uchar i,j,p;
604 1 //把当前要用的区间清空
605 1 CS1=0,CS2=1;
606 1 lcdwrite_cmd(0xbe);
607 1 lcdwrite_cmd(0x40);
608 1 for(i=64;i>0;i--)
609 1 {
610 2 lcdwrite_dat(0x00);
611 2 lcd_busy();
612 2 }
C51 COMPILER V7.06 HCLCD 09/24/2008 15:03:44 PAGE 11
613 1 lcdwrite_cmd(0xbf);
614 1 lcdwrite_cmd(0x40);
615 1 for(i=64;i>0;i--)
616 1 {
617 2 lcdwrite_dat(0x00);
618 2 lcd_busy();
619 2 }
620 1 //开始写要设定的数据(左半边)
621 1 lcdwrite_cmd(0xbe);
622 1 lcdwrite_cmd(0x40);
623 1 j=Bmpcol;
624 1 for(;j<=32;j++)
625 1 {
626 2 lcdwrite_dat(Bmp1zk[j-1]);
627 2 lcd_busy();
628 2 }
629 1 lcdwrite_cmd(0xbf);
630 1 lcdwrite_cmd(0x40);
631 1 j=Bmpcol;
632 1 for(;j<=32;j++)
633 1 {
634 2 lcdwrite_dat(Bmp1zk[j-1+32]);
635 2 lcd_busy();
636 2 }
637 1 //开始写要设定的数据(右半边)
638 1 j=Bmpcol;
639 1 lcdwrite_cmd(0xbe);
640 1 lcdwrite_cmd((32+j-1)|0x40);
641 1 p=0;
642 1 for(;j<=32;j++)
643 1 {
644 2 lcdwrite_dat(Bmp2zk[p++]);
645 2 lcd_busy();
646 2 }
647 1 j=Bmpcol;
648 1 lcdwrite_cmd(0xbf);
649 1 lcdwrite_cmd((32+j-1)|0x40);
650 1 p=0;
651 1 for(;j<=32;j++)
652 1 {
653 2 lcdwrite_dat(Bmp2zk[32+(p++)]);
654 2 lcd_busy();
655 2 }
656 1 }
657
658 //显示一幅128X64的图片,参数为图片在bmp12864放置的第几个图
659 void Disp128_64(Uchar BMPplace)
660 {
661 1 Uchar i,Nowcol,k;
662 1 Uint j;
663 1 j=(BMPplace-1)*1024; //计算出在图表格中的起始位置
664 1 lcdclrall();
665 1 for(i=0;i<8;i++)
666 1 { Nowcol=0x00;
667 2 k=128;
668 2 while(k!=0)
669 2 {
670 3 if(Nowcol<0x40)
671 3 {CS1=0;CS2=1;}
672 3 else
673 3 { if(Nowcol<0x80)
674 4 {CS1=1;CS2=0;}
C51 COMPILER V7.06 HCLCD 09/24/2008 15:03:44 PAGE 12
675 4 else
676 4 {break;}
677 4 }
678 3 lcdwrite_cmd(i|0xb8);
679 3 lcdwrite_cmd(Nowcol|0x40);
680 3 lcdwrite_dat(bmp12864[j]);
681 3 lcd_busy();
682 3 Nowcol++;
683 3 j++;
684 3 k--;
685 3 }
686 2 }
687 1 }
688 void delay(void)
689 {
690 1 Uchar i,j,k;
691 1 for(i=0x02;i>0;i--)
692 1 {
693 2 for(j=0x96;j>0;j--)
694 2 {
695 3 for(k=0xfa;k>0;k--)
696 3 {
697 4 _nop_();
698 4 // _nop_();
699 4 }
700 3 }
701 2 }
702 1 }
703
704
705 /*----------------------I2C要用到的一些子程序---------------------------------*/
706 /***********************以下为一些用到的子程序*********************************/
707 /*延时子程序*/
708 void Delay_1ms(Uchar time)
709 {
710 1 Uchar j;
711 1 while(time--)
712 1 {
713 2 for(j=163;j!=0;j--)
714 2 {;}
715 2 }
716 1 }
717
718 /*I2C的起动程序*/
719 void I2CStart(void)
720 {
721 1 SDA = 1;
722 1 SomeNOP();
723 1 SCL = 1;
724 1 SomeNOP();
725 1 SDA = 0;
726 1 SomeNOP();
727 1 SCL = 0;
728 1 SomeNOP();
729 1 }
730
731 /*I2C的停止程序*/
732 void I2CStop(void)
733 {
734 1 SDA = 0;
735 1 SomeNOP();
736 1 SCL = 1;
C51 COMPILER V7.06 HCLCD 09/24/2008 15:03:44 PAGE 13
737 1 SomeNOP();
738 1 SDA = 1;
739 1 SomeNOP();
740 1 }
741
742 void ACK(void) //Acknowledge信号
743 {
744 1 SDA = 0;
745 1 SomeNOP();
746 1 SCL = 1;
747 1 SomeNOP();
748 1 SCL = 0;
749 1 SomeNOP();
750 1 }
751
752 void NACK(void) //没有Acknowledge信号
753 {
754 1 SDA = 1;
755 1 SomeNOP();
756 1 SCL = 1;
757 1 SomeNOP();
758 1 SCL = 0;
759 1 SomeNOP();
760 1 }
761
762 void AutoACK(void) //在一定的时间内自动确定ACK的信号//
763 {
764 1 Uchar i = 0;
765 1 SCL = 1;
766 1 SomeNOP();
767 1 while((SDA == 1)&&(i<255))i++;
768 1 SCL = 0;
769 1 SomeNOP();
770 1 }
771
772
773 /*I2C写数据程序(向数据线上写一个BYTE)*/
774 void Writex(Uchar j)
775 {
776 1 Uchar i,temp;
777 1 temp = j;
778 1 for (i=0;i<8;i++) //串行移位,先送高位,再送低位//
779 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -