历史上的今天
今天是: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);//转速调节 } }
史海拾趣
|
汽车的视野性、方便性、舒适性等与车身电子控制系统息息相关。 视野性是指驾驶员在操纵汽车时,不需改变操作姿势对道路及周围环境观察的可见范围,视野控制技术指的是对汽车照明灯以及对电动刮水器、洗涤器和除霜器等的电子控制。方便性除指 ...… 查看全部问答> |
|
本人有MTK 平台的 0812 0816 06B 6223 单双卡双待等源码,提供配套的测试手机以及刷机线!可以满足学习与开发需要, 有学习需要的朋友可以加我,一起学习!一起做MTK的技术精英。 另外,对于初学者,本人可以提供环境搭建的完整工具与相应文档, ...… 查看全部问答> |
|
在wince中 RAM 被分成两个区域 一个是程序内存 这个好理解 还有个就是 对象存储库 这个对象存储库 不太理解 我们在往wince里面烧写程序的时候不是都烧写在 flash rom 里面的吗 那怎么 RAM ...… 查看全部问答> |
|
大家好: 我用的是顶星TM810-T主板,C3主频为1G的CPU,我想将主频超到1.33G,在BIOS中按照以下的设置后,保存退出,怎么还是原来的1G(100*10)主频呢?我的设置如下: Auto Detect DIMM/PCI Clk [Enabled] 默认,没有改 Spread Sp ...… 查看全部问答> |
|
今年的冬天,有寒冷还有雾霾,这是一个适合宅的冬天。对于那些本就不喜外出的技术宅来说,这再适合不过了,没有活动邀请,没有电话催促,可以宅在房间一隅摆弄自己心爱的玩意。 现在,为大家整理出本年度十大DIY方案,供各位技术宅神选用。仅供 ...… 查看全部问答> |
|
需要精简现在的网络交换单元的结构,现在是4片IP175D连接在一起,对外有14网络接口,其代价是4片IP175LFI,板子发热严重,电源不堪重负,因此开始重新选型,原则是单芯片多口, 条件如下: 1:MII/RMII 2:单芯片8个网络口以上。 3:工业级 4: ...… 查看全部问答> |




