资源简介
基于51单片机的4路抢答器的源代码程序。希望觉得有用。
代码片段和文件信息
#include “lcd.h“
/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c) //误差 0us
{
uchar ab;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/**交换数据的高低位,因为P2口接反了v**/
uchar datachange(uchar a)
{
a=(a<<4)|(a>>4);
a=((a<<2)&0xcc)|((a>>2)&0x33);
a=((a<<1)&0xaa)|((a>>1)&0x55);
return a;
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = datachange(com); //放入命令
Lcd1602_Delay1ms(1); //等待数据稳定
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com) //写入命令
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //选择写入命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = datachange(dat); //写入数据
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdInit()
* 函数功能 : 初始化LCD屏
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdInit() //LCD初始化
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-05-04 16:30 立项\
目录 0 2019-05-04 16:27 立项\Listings\
文件 6960 2019-05-03 17:32 立项\Listings\lcd.lst
文件 7882 2019-04-28 14:06 立项\Listings\lcd1602.lst
文件 13625 2019-05-04 16:27 立项\Listings\lixiang.lst
文件 21999 2019-05-04 16:27 立项\Listings\lixiang.m51
目录 0 2019-05-04 16:27 立项\ob
文件 4138 2019-05-03 17:32 立项\ob
文件 15040 2019-05-04 16:27 立项\ob
文件 908 2019-05-04 16:27 立项\ob
文件 3835 2019-05-04 16:27 立项\ob
文件 104 2019-05-04 16:27 立项\ob
文件 13452 2019-05-04 16:27 立项\ob
文件 3798 2019-05-03 17:32 立项\lcd.c
文件 966 2019-04-28 23:11 立项\lcd.h
文件 6426 2019-05-04 16:27 立项\lixiang.c
文件 137842 2019-05-04 16:30 立项\lixiang.uvgui.独行驹
文件 8164 2019-05-03 17:43 立项\lixiang.uvopt
文件 14024 2019-04-28 23:57 立项\lixiang.uvproj
评论
共有 条评论