- 浏览: 581065 次
文章分类
最新评论
-
wjwjwjwj:
void T0_Work() //T0定时器调用的工作函数 ...
51单片机学习笔记:基于状态机的按键对时程序(短按,长按,连发) -
xouou_53320:
lastSeries 写道前辈,是不是在工作以后连System ...
java学习笔记:TCP通讯,传送任意文件(服务端并发) -
lastSeries:
前辈,是不是在工作以后连System.out.println( ...
java学习笔记:TCP通讯,传送任意文件(服务端并发) -
xouou_53320:
chuanwang66 写道不过改了iconv.exe路径也不 ...
Source Insight 中文乱码,用iconv转码,解决中文乱码问题_20150930更新 -
anazel:
正在学习,多谢分享
51单片机学习笔记:基于状态机的按键对时程序(短按,长按,连发)
TX-1C板
操作并行模式的1602液晶
液晶第1,2脚是gnd和vcc
第3脚是对比度调节
第4脚是数据/指令选择端RS
第5脚是读写选择端R/W,我们这次只写不读,故直接接地
第6脚是读写使能EN
第7到14脚是数据口,我们接STC89C52RC的P0口
第15,16脚是背光源
最终液晶显示
Tom is playing the TNT game!
#include <reg52.h> #include "MY51.H" void write_data(uchar dataValue); //写数据 void write_cmd(uchar cmdValue); //写指令 uchar code tableLCD1[] ={"Tom is playing"}; uchar code tableLCD2[] ={" the TNT game!"}; void lcdInit() //初始化函数 { dula=0; // wela=0; //防止数码管误显,浪费电流 lcdEN=low; //给高脉冲之前的状态 lcdRS=high; //初始给高电平,其实上电默认也是高电平 write_cmd(0x38); //液晶显示模式初始化 write_cmd(0x0c); //打开液晶,不显示光标,光标不闪烁 write_cmd(0x06); //地址指针加加,且光标加加 write_cmd(0x01); //液晶数据指针和显示清零 } void write_cmd(uchar cmdValue) //写入指令 { lcdRS=low; //刚上电时是高电平,低电平时是指令模式 P0=cmdValue; delayms(1); lcdEN=high; //一个高脉冲把数据读走 delayms(1); lcdEN=low; } void write_data(uchar dataValue) //写入数据 { lcdRS=high; //高电平是数据模式 P0=dataValue; delayms(1); lcdEN=high; //给一个高脉冲 delayms(1); lcdEN=low; } void lcdShow(uchar* pValue) //液晶显示函数 { while(*pValue!='\0') { write_data(*pValue); pValue++; } } void main() { lcdInit(); //初始化 lcdShow(tableLCD1); //显示第一行 write_cmd(0x80+0x40); //重新设置数据显示指针 lcdShow(tableLCD2); //显示第二行 while(1); }
#ifndef _MY51_H_
#define _MY51_H_
#include <math.h>
#include <intrins.h>
typedef int int16 ;
typedef int INT16 ;
typedef unsigned int uint16 ;
typedef unsigned int UINT16 ;
typedef unsigned short uint ;
typedef unsigned short UINT ;
typedef unsigned short word ;
typedef unsigned short WORD ;
typedef unsigned long uint32 ;
typedef unsigned long UINT32 ;
typedef unsigned long DWORD ;
typedef unsigned long dword ;
typedef signed long int32 ;
typedef signed long INT32 ;
typedef float float32 ;
typedef double double64 ;
typedef signed char int8 ;
typedef signed char INT8 ;
typedef unsigned char byte ;
typedef unsigned char BYTE ; //WINDOWS的windef.h里面是这么定义的
typedef unsigned char uchar ;
typedef unsigned char UCHAR ;
typedef unsigned char UINT8 ;
typedef unsigned char uint8 ;
typedef unsigned char BOOL ; //windows中定义BOOL为int
typedef unsigned char bool ; //bool是c++的内置类型
#define TRUE 1
#define true 1
#define FALSE 0
#define false 0
#define open 1 //open和close用于 标志打开和关闭状态
#define OPEN 1
#define close 0
#define CLOSE 0
#define lock 0
#define start 1
#define START 1
#define stop 0
#define STOP 0
#define keyDown 0
#define keyUp 1
#define gnd 0 //接地
#define GND 0 //接地
#define high 1 //高电平
#define low 0 //低电平
#define yes 1
#define YES 1
#define no 0
#define NO 0
sbit dula =P2^6; //段选锁存器控制 控制笔段
sbit wela =P2^7; //位选锁存器控制 控制位置
#define led P1 //灯总线控制
sbit led0=P1^0; //8个led灯,阴极送低电平点亮
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
sbit keyS2=P3^4; //4个独立按键
sbit keyS3=P3^5;
sbit keyS4=P3^6;
sbit keyS5=P3^7;
sbit lcdEN=P3^4; //液晶通讯使能端en,高脉冲有效
sbit lcdRS=P3^5; //液晶第4脚,RS,低电平是指令模式,高电平是数据模式
//sbit lcdR/W //液晶第5脚,低电平是写入模式,因为我们只写不读,所以接地
sbit csda=P3^2; //DAC0832模数转换cs口
sbit adwr=P3^6; //ADC0804这个同DAC0832
sbit dawr=P3^6;
sbit adrd=P3^7; //ADC0804
sbit beep=P2^3; //蜂鸣器
void displaySMG(uint8 one,uint8 two,uint8 three,uint8 four,uint8 five,uint8 six,uint8 dot);
void delayms(uint16 ms);
void T0_Work();
void delayms(uint16 ms) //软延时函数
{
uint16 i,j;
for(i=ms;i>0;i--)
{
for(j=113;j>0;j--)
{}
}
}
///////////////////////////////////////////////////////////////////////////
#define dark 0x11 //在段中,0x11是第17号元素,为0是低电平,数码管不亮
#define dotDark 0xff //小数点全暗时
uint8 code table[]= { //0~F外加小数点和空输出的数码管编码
0x3f , 0x06 , 0x5b , 0x4f , // 0 1 2 3
0x66 , 0x6d , 0x7d , 0x07 , // 4 5 6 7
0x7f , 0x6f , 0x77 , 0x7c , // 8 9 A B
0x39 , 0x5e , 0x79 , 0x71 , // C D E F
0x80 , 0x00 ,0x40 // . 空 负号 空时是第0x11号也就是第17号元素
};
uint8 dotTable[]={ //小数点位置
0xff , //全暗
0xfe , 0xfd , 0xfb , //1 2 3
0xf7 , 0xef , 0xdf //4 5 6
};
/////////////////////////////////////////////////////////////////////////////
uint8 TH0Cout=0 ; //初值
uint8 TL0Cout=0 ;
uint16 T0IntCout=0; //中断计数
uint16 T0IntCountAll=0; //(N-1)/65536+1; //总中断次数
bool bT0Delay=false; //使用延时函数标志,初始未用
bool bT0Over=false; //中断处理函数执行结果之一
void startT0(uint32 ms) //开启定时器
{
float32 t=ms/1000.0; //定时时间
double64 fox =11.0592*(pow(10,6)); //晶振频率
uint32 N=(t*fox)/12 ; //定时器总计数值
TH0Cout =(65536-N%65536)/256; //装入计时值零头计数初值
TL0Cout =(65536-N%65536)%256;
T0IntCountAll=(N-1)/65536+1; //总中断次数
TMOD=TMOD | 0x01; //设置定时器0的工作方式为1
EA =open; //打开总中断
ET0=open; //打开定时器中断
TH0=TH0Cout; //定时器装入初值
TL0=TL0Cout;
TR0=start; //启动定时器
}
void delayT0(uint32 ms) //硬延时函数,自己乱写的不好用,求指点
{
startT0(ms); //启动定时器
bT0Delay=true; //告诉T0定时器,起用延时模式
while(bT0Over==false); //时间没到的话继续检测
bT0Over=false; //时间到了,让标志复位
}
void T0_times() interrupt 1 //T0定时器中断函数
{
T0IntCout++;
if(T0IntCout==T0IntCountAll) //达到总中断次数值
{
T0IntCout=0; //中断次数清零,重新计时
bT0Over=true; //时间真的到了
if(bT0Delay) //本次中断是用来延时的吗
{
TR0=stop; //如果是由延时函数开启T0的话,关闭T0
return;
}
TH0=TH0Cout; //循环定时的话要重装初值,每次定时1秒,重装一次
TL0=TL0Cout;
T0_Work(); //工作函数
}
}
////////////////////////////////////////////////////////////////////////////////
void displaySMG(uint8 oneWela,uint8 twoWela,uint8 threeWela,uint8 fourWela,uint8 fiveWela,uint8 sixWela,uint8 dot)
{
//控制6位数码管显示函数,不显示的位用参数dark,保留ADC0804的片选信号
uint8 csadState=0x80&P0; //提取最高位,即ADC0804的片选信号
uint8 tempP0=((csadState==0)?0x7f:0xff); //数码管位选初始信号,阴极全置高电平
P0=tempP0; //0x7f表示数码管不亮,同时ADC0804片选有效
wela=1; //注:wela和dula上电默认为1
P0=tempP0;
wela=0;
P0=0; //由于数码管是共阴极的,阳极送低电平,灯不亮,防止灯误亮
dula=1;
P0=0;
dula=0; //段选数据清空并锁定
//////////////////////////oneWela
{ //消除叠影,数码管阴极置高电平,并锁存
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0; //低电平送到数码管阳极,避免数码管误亮
dula=1;
P0=table[oneWela]|((0x01&dot)?0x00:0x80); //送段数据,叠加小数点的显示
dula=0;
P0=tempP0; //送位数据前关闭所有显示,并保持csad信号
wela=1;
P0=tempP0 & 0xfe; //0111 1110最高位是AD片选,低6位是数码管位选,低电平有效
wela=0;
delayms(2);
/////////////////////////twoWela
{ //消除叠影
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0;
dula=1;
P0=table[twoWela]|((0x02&dot)?0x00:0x80);
dula=0;
P0=tempP0;
wela=1;
P0=tempP0 & 0xfd; //0111 1101
wela=0;
delayms(2);
/////////////////////////threeWela
{ //消除叠影
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0;
dula=1;
P0=table[threeWela]|((0x04&dot)?0x00:0x80);
dula=0;
P0=tempP0;
wela=1;
P0=tempP0 & 0xfb; //0111 1011
wela=0;
delayms(2);
/////////////////////////fourWela
{ //消除叠影
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0;
dula=1;
P0=table[fourWela]|((0x08&dot)?0x00:0x80);
dula=0;
P0=tempP0;
wela=1;
P0=tempP0 & 0xf7; //0111 0111
wela=0;
delayms(2);
/////////////////////////fiveWela
{ //消除叠影
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0;
dula=1;
P0=table[fiveWela]|((0x10&dot)?0x00:0x80);
dula=0;
P0=tempP0;
wela=1;
P0=tempP0 & 0xef; //0110 1111
wela=0;
delayms(2);
/////////////////////////sixWela
{ //消除叠影
P0=tempP0;
wela=1;
P0=tempP0;
wela=0;
}
P0=0;
dula=1;
P0=table[sixWela]|((0x20&dot)?0x00:0x80);
dula=0;
P0=tempP0;
wela=1;
P0=tempP0 & 0xdf; //0101 1111
wela=0;
delayms(2);
}
#endif
发表评论
-
基于c8051f310的mcp41010数字电位器驱动源码
2015-05-16 20:22 4143#include "mcp41010.h" ... -
12864液晶驱动源码,独创中英文混合输出
2015-02-02 15:46 10839控制器7920 代码没啥 ... -
51单片机学习笔记:合并1602和12864液晶排插接口
2013-03-23 17:44 5850今天成功合并1602和12864液晶排插接口! ... -
51单片机学习笔记:ST7920控制器的12864液晶使用总结
2013-03-22 17:05 10944总结:1、 控制芯片不 ... -
51单片机学习笔记:定时器产生PWM可调方波,控制led灯亮度
2013-03-04 11:43 15798使用定时器T0产生PWM方波, 用按键调整占空比,20级可 ... -
51单片机学习笔记:写了个led宏,并尝试控制led灯的亮度
2013-03-02 11:19 4859经常用led灯来观察现象,甚至调试代码,修改代码时用0和1很 ... -
51单片机学习笔记:步进电机控制,正转反转等
2013-03-01 17:52 10713步进电机应用广泛, 例 ... -
51单片机学习笔记:连续读写STC89C52RC内部EEPROM存储器
2013-02-26 17:03 23726STC单片机的内部EEPROM是用DATAFLASH模拟出 ... -
51单片机学习笔记:红外接收(对原子哥的ALIENTEK遥控器进行解码)
2013-02-23 15:50 10845正点原子的ALIENTEK遥控 ... -
51单片机学习笔记:使用DS1302芯片制作电子钟
2013-02-15 20:07 20748百度ds1302 写道 DS1302 是美国DALLAS公 ... -
51单片机学习笔记:DS18B20测温程序
2013-02-13 10:51 18039#include "my51.h&quo ... -
手工制作51开发板
2013-01-29 16:08 1340纯山寨tx-1c开发板 ,第一次动手焊板子, ,*_* ... -
51单片机学习笔记:基于状态机的按键对时程序(短按,长按,连发)
2013-01-20 10:27 23170之前的电子钟程序中,用的按键消抖处理方法是10ms的延时, ... -
硬件和软件兼容i2c协议的24Cxx系列EEPROM存储器
2013-01-19 17:46 3118硬件上由于24c01的A0A1A2管脚不允许悬空,故暂时的 ... -
51单片机学习笔记,模拟iic总线连续读写24c02存储器
2012-09-03 13:02 19394AT24C02A, 2K SERIAL EEPROM: I ... -
51单片机学习笔记:利用ADC0804模数转换器采集电压
2012-08-10 20:06 7846电位器调节待检测电压值,在数码管上显示出来, 代码大多从书上 ... -
51单片机学习笔记:串口接收和发送数据
2012-08-05 16:57 40977芯片STC89C52RC 在PC端向单片机发送任意数 ... -
51单片机学习笔记,4*4矩阵键盘
2012-07-27 21:59 5511今天学习了下矩阵键盘, 4*4, 分别代表0~F这16个数 ... -
51单片机学习笔记:可对时电子钟
2012-07-24 20:45 1723本篇是对上一篇的改进,昨天学习了第4章 中的独立键盘的使用 ... -
51单片机学习笔记,简易时钟
2012-07-19 16:31 1947使用芯片STC89C52RC, 2个锁存器 6个带小数点共阴 ...
相关推荐
51单片机Proteus仿真实例 1602液晶显示DS1302实时时钟51单片机Proteus仿真实例 1602液晶显示DS1302实时时钟51单片机Proteus仿真实例 1602液晶显示DS1302实时时钟51单片机Proteus仿真实例 1602液晶显示DS1302实时时钟...
51单片机Proteus仿真实例 1602字符液晶滚动演示程序51单片机Proteus仿真实例 1602字符液晶滚动演示程序51单片机Proteus仿真实例 1602字符液晶滚动演示程序51单片机Proteus仿真实例 1602字符液晶滚动演示程序51单片机...
51单片机音乐盒1602液晶开关机按键暂停/开始播放按键、播放曲目显示、播放时间显示,LCD1602显示屏,8首歌曲
51单片机实例144-1602液晶显示的计算器
51单片机学习笔记,自己学习单片机的笔记,
51单片机教程实例94-1602液晶滚动显示
单片机C语言程序设计 1602液晶显示的DS1302实时时钟(有源码)单片机C语言程序设计 1602液晶显示的DS1302实时时钟(有源码)单片机C语言程序设计 1602液晶显示的DS1302实时时钟(有源码)单片机C语言程序设计 1602液晶...
TX-1C板操作并行模式的1602液晶液晶第1,2脚是gnd和vcc第3脚是对比度调节第4脚是数据/指令选择端RS第5脚是读写选择端R/W,我们这次只写不读,故直接接地第6脚是读写使能EN第7到14脚是数据口。 操作并行模式的...
单片机C语言程序设计 1602字符液晶滚动演示程序(有源码)单片机C语言程序设计 1602字符液晶滚动演示程序(有源码)单片机C语言程序设计 1602字符液晶滚动演示程序(有源码)单片机C语言程序设计 1602字符液晶滚动演示...
51单片机Proteus仿真实例 1602LCD显示的秒表51单片机Proteus仿真实例 1602LCD显示的秒表51单片机Proteus仿真实例 1602LCD显示的秒表51单片机Proteus仿真实例 1602LCD显示的秒表51单片机Proteus仿真实例 1602LCD显示...
259-ps2键盘LCD1602液晶显示(51单片机C语言实例Proteus仿真和代码)259-ps2键盘LCD1602液晶显示(51单片机C语言实例Proteus仿真和代码)259-ps2键盘LCD1602液晶显示(51单片机C语言实例Proteus仿真和代码)259-ps2键盘LCD...
基于51单片机,利用C51写的LCD1602液晶模块的单片机应用
51单片机Proteus仿真实例 160128液晶显示当前压力51单片机Proteus仿真实例 160128液晶显示当前压力51单片机Proteus仿真实例 160128液晶显示当前压力51单片机Proteus仿真实例 160128液晶显示当前压力51单片机Proteus...
92-1602液晶静态显示(51单片机C语言实例Proteus仿真和代码)92-1602液晶静态显示(51单片机C语言实例Proteus仿真和代码)92-1602液晶静态显示(51单片机C语言实例Proteus仿真和代码)92-1602液晶静态显示(51单片机C语言...
基于C51单片机 sony CX20106芯片 1602液晶LCD 使用keil编译的超声波测距程序
51单片机1602液晶按键输入显示
51单片机电子密码锁1602液晶显示资料.rar
51单片机实例142-1602液晶显示的密码锁
基于51单片机的1602字符型液晶的显示,程序,初级学习者需要的,也可用于简单屏幕测试的基础学习
最新单片机仿真 1602字符液晶滚动演示程序最新单片机仿真 1602字符液晶滚动演示程序最新单片机仿真 1602字符液晶滚动演示程序最新单片机仿真 1602字符液晶滚动演示程序最新单片机仿真 1602字符液晶滚动演示程序最新...