历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2019年12月03日 | 智能窗帘设计:51单片机+A/D转换+光敏电阻+LCD1602+步进电机

2019-12-03 来源:51hei

 

单片机源程序如下:

#include          


#define uchar unsigned char

#define uint unsigned int

#define yi 0x80       //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)

#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)


uchar display_digit[]={0,0,0};

uchar yuzhi[]={0,0,0};

uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A

uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D


sbit R_D=P2^0;

sbit W_R=P2^1;        

sbit C_S=P2^2;        


sbit Up=P2^3;                

sbit Down=P2^4;                


sbit rw=P2^5;                 //液晶读写端

sbit rs=P2^6;                 //液晶指令/数据输入控制

sbit en=P2^7;                 //液晶使能端


sbit AD_data=P1;        


sbit bianji=P3^4;

sbit jia=P3^7;

sbit jian=P3^6;


uint adval; 

uint fazhi=180;

uchar state=1;//1为窗帘打开,0为窗帘关闭 

uchar zhuangtai=1;//1为窗帘打开,0为窗帘关闭


void  Time_init()                

{

        EA=1;

        TMOD=0x11;

        TH0=0xf8;        

        TL0=0xcc;

        ET0=1;

        TR0=0;

}


void delay(uint time)          

{

        uint x,y;                         

        for(x=time;x>0;x--)

        for(y=110;y>0;y--);        

}


void qiangdushuzhi()                

{

        C_S=0;                                  

        W_R=0;                 //启动AD转换

        delay(1);

        W_R=1;

        C_S=1;

        delay(10);

        P1=0xff;                //读取AD转换值前,先把P1口置1                

        C_S=0;

        R_D=0;                         //AD读使能

        delay(1);                  

        adval=P1;                  //把AD转换好的值,赋给 adval

        R_D=1;

        C_S=1;                         //置1后,为下次AD转换做准备

        delay(1);

        

        display_digit[0]=adval/100;

        display_digit[1]=adval%100/10;                   //取得十位数字

        display_digit[2]=adval%10;                   //取得个位数字

}                


void write_1602com(uchar com)

{

        rs=0;                //数据/指令选择置为指令

        rw=0;                //读写选择置为写

        P0=com;              //送入数据

        delay(1);

        en=1;                //拉高使能端,为制造有效的下降沿做准备

        delay(1);

        en=0;                //en由高变低,产生下降沿,液晶执行命令

}


void write_1602dat(uchar dat)

{

        rs=1;               //数据/指令选择置为数据

        rw=0;               //读写选择置为写

        P0=dat;             //送入数据

        delay(1);

        en=1;               //en置高电平,为制造下降沿做准备

        delay(1);

        en=0;               //en由高变低,产生下降沿,液晶执行命令

}


void write_1602str(uchar *s)  //写字符串

{

        while(*s)

                {

                        write_1602dat(*s++);

    }

}


void lcd_init()

{

        write_1602com(0x38);         //设置液晶工作模式,

        write_1602com(0x0c);         //开显示不显示光标

        write_1602com(0x06);         //整屏不移动,光标自动右移

        write_1602com(0x01);         //清显示

  delay(5);

        write_1602com(yi+5);         //固定符号从第一行第1个位置之后开始显示

        write_1602str("WELCOME");      

        delay(1000);

        write_1602com(0x01); 

}


void display( )

{

        yuzhi[0]=fazhi/100;

        yuzhi[1]=fazhi%100/10;

        yuzhi[2]=fazhi%10;

        write_1602com(yi+0);

        write_1602str(" TARGET:");

  if(yuzhi[0]==0)

        {

                write_1602dat(0x30+yuzhi[1]);

                delay(5);

                write_1602dat(0x30+yuzhi[2]);

                delay(5);

        }

  if(yuzhi[0]!=0)

        {

                write_1602dat(0x30+yuzhi[0]);

                delay(5);

                write_1602dat(0x30+yuzhi[1]);

                delay(5);

                write_1602dat(0x30+yuzhi[2]);

                delay(5);

        }

        write_1602com(er+0);       //er是头文件写的值0x80+0x40

        delay(5);

        write_1602str("CURRENT:");   

        delay(5);

        if(display_digit[0]==0)

        {

                write_1602dat(0x30+display_digit[1]);      //数字+30得到该数字的LCD1602显示码

          delay(5);

          write_1602dat(0x30+display_digit[2]);      //数字+30得到该数字的LCD1602显示码                        

    delay(5);        

                write_1602str(" ");      //数字+30得到该数字的LCD1602显示码                        

    delay(5);        

        }

        if(display_digit[0]!=0)

        {

                write_1602dat(0x30+display_digit[0]); 

          delay(5);

          write_1602dat(0x30+display_digit[1]);      //数字+30得到该数字的LCD1602显示码

          delay(5);

          write_1602dat(0x30+display_digit[2]);      //数字+30得到该数字的LCD1602显示码                        

    delay(5);

        }

        if(zhuangtai==1)

        {

                write_1602com(yi+12);

                write_1602str("OPEN");

        }

        if(zhuangtai==0)

        {

                write_1602com(er+11);

                write_1602str("CLOSE");

        }

}


void zhengzhuan(uchar step)  //上升

{

        uchar i,j,k;

        if(zhuangtai==0)

        {

                write_1602com(0x01); 

                write_1602com(yi+6);

                write_1602str("UP");

                k=20*step;

                for(j=0;j                {

                        for(i=0;i<4;i++)

                        {

                                P3=phasecw[i];

                                delay(10);//转速调节

                        }

                }

推荐阅读

史海拾趣

Asia Pacific Microsystems Inc公司的发展小趣事

为了进一步提升市场份额和品牌影响力,APM开始积极拓展国内外市场。公司不仅加强了与现有客户的合作关系,还积极参加各类行业展会和技术交流会,与潜在客户建立联系。同时,APM还加大了对品牌建设的投入,通过广告宣传、媒体报道等方式提升品牌知名度和美誉度。这些举措使得APM在电子行业中的影响力逐渐增强。

安信可(Ai)公司的发展小趣事

在不断创新和突破的过程中,安信可不断推出具有创新性的产品。例如,公司推出的WiFi+BLE蓝牙二合一的Ai-WB1系列模组,凭借其高可靠度、高集成度、应用灵活、高性价比等特点,深受市场欢迎。这款产品不仅为智能设备提供了无线通信连接能力,还广泛应用于工业、商业、消费等各类市场,进一步拓展了安信可的应用领域。

Britool Expert公司的发展小趣事

2012年4月,深圳市安信可科技有限公司正式成立,标志着这家公司在电子行业的起点。成立之初,安信可便专注于物联网领域,致力于为客户提供高质量的模组产品。通过引入先进的科技和创新理念,安信可逐渐在物联网市场中崭露头角,为后续的发展奠定了坚实的基础。

Cygnal Integrated Products Inc公司的发展小趣事

在20世纪90年代末,Cygnal Integrated Products Inc由几位热衷于微控制器技术的工程师创立。他们看到了嵌入式系统在电子产品中的巨大潜力,并决定专注于开发高性能、低功耗的微控制器。通过不断的技术创新和市场调研,Cygnal成功推出了其首款产品——一款集成了多种外设接口的8位微控制器,受到了市场的热烈欢迎。

ELM [ELM Electronics]公司的发展小趣事

ELM Electronics成立于XXXX年,由一群富有创新精神和电子技术专长的工程师创立。初创时期,公司专注于设计和生产高质量的电子元器件,以满足日益增长的电子产品市场需求。通过不断的技术创新和严格的质量控制,ELM逐渐在电子行业中树立了良好的口碑。

American Custom Components公司的发展小趣事

随着技术的不断进步,American Custom Components公司开始寻求市场拓展的机会。在一次国际电子展览会上,公司展示了其最新研发的电子元器件,并成功吸引了一家欧洲知名电子企业的关注。双方经过深入的沟通和交流,决定展开战略合作,共同开发新的电子产品。这一合作不仅拓宽了公司的销售渠道,还提高了公司的知名度和影响力。

问答坊 | AI 解惑

车身电子控制系统提升汽车性能

  汽车的视野性、方便性、舒适性等与车身电子控制系统息息相关。  视野性是指驾驶员在操纵汽车时,不需改变操作姿势对道路及周围环境观察的可见范围,视野控制技术指的是对汽车照明灯以及对电动刮水器、洗涤器和除霜器等的电子控制。方便性除指 ...…

查看全部问答>

供应MTK平台+SP源码+配套机器+动态菜单

本人有MTK 平台的 0812 0816 06B 6223 单双卡双待等源码,提供配套的测试手机以及刷机线!可以满足学习与开发需要, 有学习需要的朋友可以加我,一起学习!一起做MTK的技术精英。 另外,对于初学者,本人可以提供环境搭建的完整工具与相应文档, ...…

查看全部问答>

有关tcsetattr的问题

tcsetattr(0,TCSANOW,&term); tcsetattr(1,TCSANOW,&term);   中的“0”和“1”表示啥意思啊?…

查看全部问答>

求教:如何时间PC与单片机之间的文件发送与接受

    急!如何实现PC机与单片机之间进行文件发送和接收(最好是双向的那种),接收方还要给传输方一个响应,编程思路是怎样. …

查看全部问答>

关于wince 的RAM 和ROM 求教

在wince中 RAM 被分成两个区域 一个是程序内存 这个好理解 还有个就是  对象存储库  这个对象存储库 不太理解  我们在往wince里面烧写程序的时候不是都烧写在 flash rom 里面的吗  那怎么 RAM   ...…

查看全部问答>

我的C3怎么超不了频?

大家好:     我用的是顶星TM810-T主板,C3主频为1G的CPU,我想将主频超到1.33G,在BIOS中按照以下的设置后,保存退出,怎么还是原来的1G(100*10)主频呢?我的设置如下: Auto Detect DIMM/PCI Clk [Enabled] 默认,没有改 Spread Sp ...…

查看全部问答>

C题 群 158887488

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 大家共同讨论哈!  …

查看全部问答>

2013年十大电子DIY方案集锦---技术宅的福利(图文)

今年的冬天,有寒冷还有雾霾,这是一个适合宅的冬天。对于那些本就不喜外出的技术宅来说,这再适合不过了,没有活动邀请,没有电话催促,可以宅在房间一隅摆弄自己心爱的玩意。  现在,为大家整理出本年度十大DIY方案,供各位技术宅神选用。仅供 ...…

查看全部问答>

8口 10/100M网络交换芯片

需要精简现在的网络交换单元的结构,现在是4片IP175D连接在一起,对外有14网络接口,其代价是4片IP175LFI,板子发热严重,电源不堪重负,因此开始重新选型,原则是单芯片多口, 条件如下: 1:MII/RMII 2:单芯片8个网络口以上。 3:工业级 4: ...…

查看全部问答>

求电子设计竞赛交流群!!

求电子设计竞赛交流群!! …

查看全部问答>