5152单片机14课:温控开关
#include <reg51.h>//头文件
#define uint unsigned int//宏定义
#define uchar unsigned char //宏定义
sbit DQ=P3^2;//18B20的2脚与单片机P3.2口相接
sbit P10=P1^0;//数码管位选引脚P1.0
sbit P11=P1^1;//数码管位选引脚P1.1
sbit P14=P1^4;//继电器控制引脚
uchar temp;
uchar htemp=30;//动作温度值
code unsigned char sz []={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9数组
void delay (uint t);//延时函数声明
void delayms(uint a);//for语句延时函数声明
void init();//18B20初始化程序声明
void write (uchar dat);//写1字节程序声明
uchar read ();//读1字节程序声明
void display();//显示程序声明
uchar readtemp();//读温度程序声明
void delay (uint t)//延时函数
{
while(t--);
}
void delayms(uint a) //for语句延时函数
{
uint x,y;
for(y=110;y>0;y--);
}
void init ()//18B20初始化程序
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
void write (uchar dat)//写1字节程序
{
uchar i;
for (i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay (4);
DQ=1;
dat>>=1;//dat=dat>>1
}
delay(4);
}
uchar read ()//读1字节程序
{
uchar i,value;
for (i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)///
value|=0x80;
delay(4);
}
return value;
}
uchar readtemp()//读温度程序
{
uchar a,b;
init();
write (0xcc);
write (0x44);
delay (300);
init ();
write (0xcc);
write (0xbe);
a=read();
b=read();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void display ()//显示程序
{
P10=0;
P0=sz[temp/10];
delayms(2);
P10=1;
P11=0;
P0=sz[temp%10];
delayms(2);
P11=1;
}
void main()//主程序
{
while(1)
{
temp=readtemp();
display ();
if (temp>=htemp)
{
P14=0;
}
else
{
P14=1;
}
}
}
STM32液晶显示HT1621驱动原理及程序代码
1、HT1621电路分析
HT1621为32×4即128点内存映像LCD驱动器,包含内嵌的32×4位显示RAM内存和时基发生器以及WDT看门狗定时器.
HT1621驱动电路如下图所示:
图1
图1
与单片机相连接控制的有9脚CS,3脚WR,12脚DATA,其功能描述如下表。
图2
2、字符显示原理
液晶管点亮和熄灭原理分别为在对应的RAM地址中写1和写0. 首先需要清楚所驱动控制的液晶的COM-SEG对应关系,然后需要了解HT1621的32×4RAM地址映射。
例如要控制的液晶的装脚成品图部分如下:
图3
着重看一个液晶数码管,我们了解原理就行。可以看到图3中是第2个液晶数码管,有7段,分别为A,B,C,D,E,F,G。也就分别为下面COM\SEG地址对应关系图中的2A,2B,2C,2D,2E,2F,2G。
液晶的显示字符的部分COM公共端输出口和SEG段输出口的分布如下表所示,同理我们可以看到例如:2D对应(SEG5,COM0),2E对应(SEG5,COM1),2F对应(SEG5,COM2),2A对应(SEG5,COM3),2C对应(SEG4,COM1),2G对应(SEG4,COM2),2B对应(SEG4,COM3)。
图4
搞清楚我们要控制的对象之后那, HT1621的RAM 地址映射如下图所示:
图5
可以清楚的看到要控制液晶段对应SEG号作为6位地址,COM号对应作为4位数据写入,此时注意4位数据的高低位。写数据到RAM命令格式为:101+6位RAM地址+4位数据,其中RAM地址为SEG序号.
例如我们在图3的第二个液晶数码管上显示数字,首先我们根据图3得到地址映射关系,先写入地址SEG4中的四位数据(COM3,COM2,COM1,COM0),再写如地址SEG5中的四位数据(COM3,COM2,COM1,COM0),对应关系如下:
所以如果在图3中显示“5”,则在显示的液晶段对应地址上写1,不显示写0,如下图所示。所以SEG4地址应写入的数据为0110 ,SEG5地址应写入数据1101。
图6
3、显示的保持
写数据过程需要保证写前无关位数据的保持,因此在单片机程序中开辟32×4数组作为虚拟ARM,存储写前LCD显示数据.通过与清零,或置位操作实现,例如6位地址Address当前显示的数据为Data_last .若Xi(i=0,1,2,3) 位需要保持,则Xi为1,否则Xi为0.写入的数据为Data_now,变换公式为:
4、程序
主要的程序编写流程如下:
图7
程序的参考步骤:①Display_Wendu_1②write_addr_dat_n_wendu③write_mode④write_address⑤write_data_4bit,其中Lcdram数组为建立的虚拟数组。
如果你的有项目需要技术支持,可以直接登录深圳安信泰的官网www.axtek.net了解更多详情,获取等多的单片机开发资料。
免责声明:部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递 更多信息之 目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系本站,我们 会尽快处理。官方所有内容、图片如未经过授权,禁止任何形式的采集、镜像,否则后果自负!
相关问答
ds18b20数据如何发给 单片机 ?在DQ=0,之后,DQ就是输入端了。如果这时DQ=1了,就在dat的最高位加一,就是:dat|=0x80。最先收到的位,是数据的最低位,所以要逐步的向低位移动...在...
单片机 51编程中有返回值的函数,要返回的那个值要加括号吗return dat 还是return?加括号更好一点,不加括号也可以,比如return0;有时候返回值太长,就加一个括号。。比如,return(strlen(gg)+strlen(yyy)+k);加括号更好一点,不加括号也可以,比...
ds1302与51 单片机 连接需要串口吗?1.不需要串口连接。2.因为ds1302与51单片机之间的通信是通过IO口进行的,而不是通过串口进行的。ds1302的数据线(DAT)连接到51单片机的IO口即可实现通信。3...
【51 单片机 DS18b02的驱动程序求解释下,程序在下面,为什么程...[最佳回答]unsignedcharRead1302(void){unsignedchari,dat;delaynus(2);//稍微等待,使硬件做好准备for(i=0;i>=1;//将dat...
求 单片机 通过串口控制LED小灯亮灭的程序,求源码,谢谢?题意没说的太清楚,随便写一个吧。#includesbitled=P1^0;main(){unsignedchardat;TMOD=0x20;TH1=0xfd;TL1=0xfd;...
帮个忙老表们,有谁清楚:江西销售医用x光机,医用x光机怎么选?[回答]串口助手因为没有握手信号的关系,所以发送数据是没有等待的,因此,单片机端接受需要开辟缓冲区才可以保证数据不丢失。用C的话就,你就用一个数组来做...
怎么通过C语言自动生成MAC地址-ZOL问答你好,你需要在“更改适配器设置”中把无线网络禁用,然后再生成License.dat文件,这时候License.dat里面的MAC地址就不会是无线网络的MAC地址了,还有就是你可以手...
TF卡转接变U盘?有、没清楚你意思。tf卡通过usb连接电脑用专用读卡器就行了,十元左右;通过手机的TF卡插槽外接读写外部U盘也是可以的,不过是一些大虾自己用ssop封装单片机做的...
奔驰GLK300,为什么电脑上可以放的视频,拿到车子上放不了?怎么...所谓单片机大致就是功能单一的机器。由于其硬件设施性能太低,所以其功能会比普...一般车载机器是DVD就支持常见格式:rm,rmvb,mp4,avi,mpeg,dat,vob等。我个人...
招商银行23型U盾插电脑上没反应- 汇财吧专业问答test[回答]重新安装驱动,换个接口,还是不行的话在别人电脑上试试!看是不是中毒了!多试试招商银行U盾使用方法:1、将U盾插在电脑usb口上,电脑会自动安装驱动程...