头像-117367

艾笠调查团

  • 河南省许昌市
  • 单片机 嵌入式 FPGA/CPLD RF/无线
  • 计算机网络

个人成就

获得 6 次赞

帮助过0人

Proteus中的12864如何显示想要显示的字

RT,我用的是元器件中的12864没字库的,纵向取模,字节倒序,搞清了原理就写了一个程序,但有很大问题...哪里有问题呢? 顺便再问一下,这个Proteus中的12864和现实中带字库的12864有什么主要区别,比如Proteus中是分页,现实中是可以控制输入模式等... 求大家帮帮忙~ #include typedef unsigned char uchar; typedef unsigned int uint; sbit en=P3^4; sbit rs=P3^5; sbit rw=P3^6; sbit cs1=P3^0; sbit cs2=P3^1; uchar code chen[]={0x40,0x42,0xCC,0x00,0x00,0x40,0x30,0x1E,0x10, 0xF0,0x10,0x10,0x18,0x10,0x00,0x00, 0x00,0x00,0x3F,0x10,0x08,0x01, 0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x01,0x00,0x00}; void delay(uchar z) { uchar a; for(z=z;z>0;z--) for(a=114;a>0;a--); } void read() { uchar r; rs=0; rw=1; en=0; do { P2=0x00; en=1; r=P2; delay(2); en=0; delay(2); r=0x80&r; } while(!(r==0x00)); } void write_com(uchar com) { read(); rw=0; rs=0; en=0; P2=com; delay(2); en=1; delay(2); en=0; } void write_dat(uchar dat) { read(); rw=0; rs=1; en=0; P2=dat; delay(2); en=1; delay(2); en=0; } void hanzi(uchar ye,uchar lie,uchar *daima) { uchar i,j; for(i=0;i

关于初学步进电机时遇到的几个问题

如题,我用的是Proteus中的6线四相步进电机 这个N相和励磁方式是对应的还是可以自由选择,我写了个小程序测试 一相励磁 方式,为什么电机可以转但是转的太慢,写了个 二相励磁 方式发现电机又不转了 还有这个电机的六个接口分别是什么...我只知道中间是电源 写的小测试程序 #include typedef unsigned char uchar; typedef unsigned int uint; uchar code table[]={0x01,0x02,0x04,0x08}; uchar code table2[]={0x08,0x04,0x02,0x01}; bit flag=1; void qudong() { uchar i; if(flag) { for(i=0;i

这个数模转换程序为什么显示不了数值?

RT,用的是PCF8591芯片,接图如下,调节U1电阻小灯看到小灯确实有明显的明暗变化,可就是数码管显示不出来数值 请问哪里出了错,这样写程序可靠吗,顺便再问一下,为什么写、读字节都要有SCL=0,SDA=1的操作? 编译时总出来C141错误,随便改了个名字没有了,这个错误到底是什么意思? #include #define uchar unsigned char #define uint unsigned int sbit SDA=P2^0; sbit SCL=P2^1; sbit du=P2^6; sbit we=P2^7; uchar code table[]={ //0 1 2 3 4 5 6 7 8 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, //9 A B C D E F - . 关显示 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00 }; uint Value; void delay_5us() {;;} void delay(uint z) { uint a; for(z=z;z>0;z--) for(a=110;a>0;a--); } void init() { SDA=1; delay_5us(); SCL=1; delay_5us(); } void start() { SDA=1; delay_5us(); SCL=1; delay_5us(); SDA=0; delay_5us(); } void stop() { SDA=0; delay_5us(); SCL=1; delay_5us(); SDA=1; delay_5us(); } void respons() { uchar i; SCL=1; delay_5us(); while((SDA==1)&&(i

【求助】红外遥控程序,为什么我没办法输入

协议是NEC红外遥控协议,用户码是00 FF,这里我取了第三个数据码,第四个是反码就不管了图片是遥控器对应的数据码 想要通过遥控器来控制数码管实现加减算法 但是输入的数总是出错

求助~~这个键盘如数字母,液晶显示程序为什么不亮呢?

也就是,用矩阵键盘输入字母,然后显示到液晶上 #include #define uchar unsigned char #define uint unsigned int sbit du=P2^6; sbit we=P2^7; sbit en=P3^4; sbit rs=P3^5; sbit rw=P3^6; uchar code tab[]="ABCDEFGHIJKLMNOP"; uchar key; void delay(uint z) { uint a; for(z=z;z>0;z--) for(a=114;a>0;a--); } void Write_dat(uchar dat) { P0=dat; rs=1; en=0; delay(5); en=1; delay(5); en=0; } void Write_com(uchar com) { P0=com; rs=0; en=0; delay(5); en=1; delay(5); en=0; } void init() { delay(20); Write_com(0x38); delay(5); Write_com(0x0c); delay(5); Write_com(0x06); delay(5); Write_com(0x01); delay(5); } void miskey() { uint temp; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(4); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { delay(4); temp=P3; switch(temp) { case 0xee: key=0;break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp=temp&0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } Write_dat(tab[key]); delay(5); } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0;} Write_dat(tab[key]); delay(5); } } } void main() { rw=0; init(); du=0; we=0; Write_com(0x80); while(1) { miskey(); } }

新手求助51单片机中 矩阵键盘 的问题

P3=一个数后 如果我按下某个矩阵键后P3是不是也会改变? 如下面这个程序中 加粗的字体 #include  #define uint unsigned int    #define uchar unsigned char sbit du=P2^6;  sbit we=P2^7; uchar code leddata[]={                    0x3F,  //"0"                 0x06,  //"1"                 0x5B,  //"2"                 0x4F,  //"3"                 0x66,  //"4"                 0x6D,  //"5"                 0x7D,  //"6"                 0x07,  //"7"                 0x7F,  //"8"                 0x6F,  //"9"                 0x77,  //"A"                 0x7C,  //"B"                 0x39,  //"C"                 0x5E,  //"D"                 0x79,  //"E"                 0x71,  //"F"                 0x76,  //"H"                 0x38,  //"L"                 0x37,  //"n"                 0x3E,  //"u"                 0x73,  //"P"                 0x5C,  //"o"                 0x40,  //"-"                 0x00,  //熄灭                 0x00  //自定义                            }; void delay(uint z) { uint x;        for(z=z;z>0;z--)     for(x=114;x>0;x--); } uchar KeyScan() { uint crod_l,crod_h;      P3=0xf0;      if((P3&0xf0)!=0xf0)         //经过测试跟if以及上面那个赋值有关  {  delay(5);      if((P3&0xf0)!=0xf0)   { crod_l=P3&0xf0;    P3=crod_l | 0x0f;          //为何不能去掉...? crod_h=P3&0x0f; while((P3&0x0f)!=0x0f);              //为何while((P3&0x0f)!=0x0f);   不行     return(crod_l+crod_h); //与while((P3&0xf0)!=0xf0); } }   }  void KeyPro() { switch(KeyScan())      { case 0xee: P0 = leddata[0]; break; case 0xde: P0 = leddata[1]; break; case 0xbe: P0 = leddata[2]; break; case 0x7e: P0 = leddata[3]; break; case 0xed: P0 = leddata[4]; break; case 0xdd: P0 = leddata[5]; break; case 0xbd: P0 = leddata[6]; break; case 0x7d: P0 = leddata[7]; break; case 0xeb: P0 = leddata[8]; break; case 0xdb: P0 = leddata[9]; break; case 0xbb: P0 = leddata[10]; break; case 0x7b: P0 = leddata[11]; break; case 0xe7: P0 = leddata[12]; break; case 0xd7: P0 = leddata[13]; break; case 0xb7: P0 = leddata[14]; break; case 0x77: P0 = leddata[15]; break; } } void main() {        we=1;      P0=0; we=0; du=1; P0=leddata[22]; while(1)   KeyPro(); }