芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

IC解密单片机LCR电桥程序

  1. // 项目:IC解密LCD1602 四线驱动程序
  2. // 设计要点:
  3. //     IC解密LCD1602 的运行速度慢,而单片机运行的速度快,因此容易因为速度不
  4. //     匹配造成调试失败。因此,调试之前应准确测试lcd_delay() 延时函数
  5. //     准确的延时量,如果不能满足注释中的要求,则应调整循次数。每步操
  6. //     作所需的延时量,按照数据手册指标指行,同时留下足够的时间余量。
  7. // 硬件连接:
  8. //     至少需要9条线,电源线2条,7条信号线。信号线详见程序中的接口定义。
  9. //     清注意对LCD1602对比度的调节,否则无显示。
  10. //==========================================================================
  11. sbit lcd_RS = P0^6; //数据命令控制位,0命令1数据
  12. sbit lcd_RW = P0^5; //读写位,0写1读
  13. sbit lcd_EN = P0^4; //使能位,下降沿触发
  14. sbit lcd_D4 = P0^3; //数据端口D4
  15. sbit lcd_D5 = P0^2; //数据端口D5
  16. sbit lcd_D6 = P0^1; //数据端口D6
  17. sbit lcd_D7 = P0^0; //数据端口D7
  18. //==========================================================================
  19. code char path[32]={
  20. 0x00,0x00,0x0e,0x11,0x11,0x0a,0x1b,0x00,
  21. 0x00,0x11,0x11,0x13,0x1d,0x10,0x10,0x10,
  22. 0x0e,0x11,0x1f,0x11,0x11,0x0e,0x00,0x00,
  23. 0x1C,0x10,0x1B,0x12,0x1B,0x01,0x07,0x00
  24. };//自定义符号
  25. char binLian=0,ATA=0,ATB=1;
  26. char OX[8]={0,0,0,0,0,0,8,0};
  27. int DDS3=1, c3 = 0; //交替显示变量
  28. char digW=4; //数字显示位数宏
  29. code uchar abc[][5]={
  30. "  err","   40","  120","  360"," 1080","   1K","   3K","   9K","  27K","  10K",
  31. "  30K","  90K"," 270K"," 100K"," 300K"," 900K"," 2.7M","   13","  4.5","  1.5"
  32. };

  33. void lcd_delay(int n){ //LCD专用延时函数
  34.   //32MHz钟频下,约循环3000次延迟1毫秒
  35.   int i,j;
  36.   if(n<0)    { for(i=0;i< 30;i++); return; } //10us
  37.   if(n== 0)  { for(i=0;i<150;i++); return; } //50us
  38.   for(;n;n--){ for(j=0;j<3000;j++);        } //n毫秒
  39. }
  40. //==========================================================================
  41. void lcd_B(char f, uchar c, char t){ //控制四线式接口LCD的7个脚
  42.   //f=0写命令字, f=1写RAM数据, f=2读地址(或读忙), f=3读RAM数据
  43.   lcd_EN = 0;
  44.   lcd_RS = f%2;
  45.   lcd_RW = f/2%2;
  46.   //移入高四位
  47.   lcd_D4 = c & 16;
  48.   lcd_D5 = c & 32;
  49.   lcd_D6 = c & 64;
  50.   lcd_D7 = c & 128;
  51.   lcd_EN = 1;  lcd_delay(-1);  lcd_EN = 0; //使能脉冲
  52.   if(f==4) { lcd_delay(t); return; }
  53.   //移入低四位
  54.   lcd_D4 = c & 1;
  55.   lcd_D5 = c & 2;
  56.   lcd_D6 = c & 4;
  57.   lcd_D7 = c & 8;
  58.   lcd_EN = 1;  lcd_delay(-1);  lcd_EN = 0; //使能脉冲
  59.   lcd_delay(t);  //不同的命令,响应时间不同,清零命令需要2ms
  60. }
  61. //==========================================================================
  62. void lcd_init(){ //LCD1602 初始化
  63.   //启动四线模式须势行9个步骤,初始化所须耗时较长,约65ms,时限不可减
  64.   lcd_delay(20); //启动lcd之前须延时大于15ms,直到VDD大于4.5V
  65.   lcd_B(4, 0x30, 9); //置8线模式,须延时大于4.1ms
  66.   lcd_B(4, 0x30, 5); //置8线模式,须延时大于100us
  67.   lcd_B(4, 0x30, 5); //置8线模式,手册中未指定延时
  68.   lcd_B(4, 0x20, 5); //进入四线模式
  69.   lcd_B(0, 0x28, 5); //四线模式双行显示
  70.   lcd_B(0, 0x0C, 5); //打开显示器
  71.   lcd_B(0, 0x80, 5); //RAM指针定位
  72.   lcd_B(0, 0x01, 5); //启动清屏命初始化LCD
  73. }
  74. //==========================================================================
  75. //=========================几个功能常用函数=================================
  76. void lcd_cls()         { lcd_B(0, 0x01+0, 2);  } //清屏
  77. void lcd_cur0()        { lcd_B(0, 0x0C+0, 0);  } //隐藏光标
  78. void lcd_goto1(uchar x){if(ATB) lcd_B(0, 0x80+x, 0); else lcd_B(0, 0x94+x, 0);} //设置DDRAM地址,第1行x位
  79. void lcd_goto2(uchar x){if(ATB) lcd_B(0, 0xC0+x, 0); else lcd_B(0, 0xD4+x, 0);} //设置DDRAM地址,第2行x位
  80. void lcd_goto3(uchar x){if(ATB) lcd_B(0, 0x94+x, 0); else lcd_B(0, 0x80+x, 0);} //设置DDRAM地址,第3行x位
  81. void lcd_goto4(uchar x){if(ATB) lcd_B(0, 0xD4+x, 0); else lcd_B(0, 0xC0+x, 0);} //设置DDRAM地址,第4行x位
  82. void lcd_putc(uchar d) { lcd_B(1, 0x00+d, 0);  } //字符输出
  83. void lcd_puts(uchar *s){ for(; *s; s++) lcd_B(1,*s,0); } //字串输出
  84. //==============字符显示函数====================

  85. void lcd_putp(float a,float b,char bo,char n, float qmin){ //带单位显示复数,n是单位下限,qmin是最小位权值(用于限定有效数字)
  86.   code uchar dwB[] = {'p','n','u','m',' ','k','M','G'}; //单位表
  87.   char i,j, c=0, h=digW-1, fh[2]={' ','+'};
  88.   long d,q,qm,Q=1; //最高位权
  89.   float f,g=1;
  90.   if(a<0) fh[0] = '-', a = -a;
  91.   if(b<0) fh[1] = '-', b = -b;
  92.   if(a>b) f = a; else f = b;
  93.   for(i=1;i<digW;i++) Q *= 10;
  94.   for(i=0;i<3;i++){ if(f*g >= 1000) g/=1000, c++; } //以3位为单位移动小数点,右移
  95.   for(i=0;i<n;i++){ if(f*g < 1)     g*=1000, c--; } //以3位为单位移动小数点,左移
  96. if ((n==1)&&(c==-1)){
  97.   for(i=1;i<2 && f*g<Q;i++) g*=10,h--;           //继续移动小数点,使之满字
  98. }else if ((n==2)&&(c==-2)){
  99.   for(i=1;i<3 && f*g<Q;i++) g*=10,h--;           //继续移动小数点,使之满字
  100. }else if ((n==4)&&(c==-4)){
  101.   for(i=1;i<2 && f*g<Q;i++) g*=10,h--;           //继续移动小数点,使之满字
  102. }else{
  103.   for(i=1;i<digW && f*g<Q;i++) g*=10,h--;        //继续移动小数点,使之满字
  104. }
  105.   qm = g*qmin;
  106.   for(i=0;i<2;i++){
  107.    if(i) d = b*g;      //取出实部
  108.    else  d = a*g;      //取出虚部
  109.    if(qm) d+=qm/2, d-=d%qm;//去除小于qmin的尾数
  110.    q = Q;
  111.    lcd_putc(fh[i]);        //显示符号
  112.    for(j=0; j<digW; j++){  //数字输出
  113.     lcd_putc(d/q+48);      //数字
  114.     if(j==h) lcd_putc('.');//小数点
  115.     d %= q, q /= 10;  
  116.    }
  117.    if(!bo) break;     //不显示虚部
  118.   }
  119.   //lcd_putc(dwB[c+4]); //单位
  120. if(dwB[c+4]=='u') { lcd_putc(9);} else {
  121. if(n==1){
  122. if(dwB[c+4]==' ') { lcd_putc(8); OX[6]=32; } else { lcd_putc(dwB[c+4]); OX[6]=8; } //自动单位
  123. }
  124. else { lcd_putc(dwB[c+4]); OX[6]=8; }
  125. } //符号

  126. }
  127. void lcd_putf(float a, char n, float qmin) //带单位显示浮点数,n是单位下限
  128.   { lcd_putp(a,0,0,n,qmin); }
  129. void lcd_int(int a,char w){ //定宽显示正整数
  130.   char i=0, s[5] = {' ',' ',' ',' ',' '};
  131.   if(a<0) { a=-a; lcd_puts("-"); }
  132.   else    lcd_puts(" ");
  133.   do{
  134.    s[i++] = a%10+48;
  135.    a /= 10;
  136.   }while(a);
  137.   for(;w;w--) lcd_putc(s[w-1]);
  138. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信