很久没有碰51了, 发现对于寄存器操作又编程大一那时候,啥也不懂了,对于本次这个小东西,还特意去图书馆借了三本51单片机的书籍来看,顿时茅塞顿开。这个小东西需要一个显示的东西来让用户看到此时的计件数目,我选了1602模块,本来想用数码管的, 但是数码管感觉好简单的样子。。。。木有时序的操作。。。这也是我做东西以来第一次用1602。。。说来也是惭愧。。。好了 ,再次接下来是用了3144的霍尔模块来测试程序的可行性。。。这里要注意区分传感器的类别,霍尔分为开关型和线性型的,一个输出数字量,一个输出模拟量。这个百度一下就知道了。
大概就是这个样子= =、
接下来是代码咯。
首先是LCD部分
#include"lcd.h"
/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c) //误差 0us
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS//当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(1);//等待数据稳定
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);