/*----------------------------------------------------------------------------
=======================================
JD51 2015开发板配套实验学习例程
=======================================
************************************程序功能说明******************************
本程序用来检测JD51开发板程序运行及部分硬件功能是否正常;
实现功能流程:
1)开发板上电,依次进行LED,LCD,数码管自检,而后蜂鸣器响四声,自检完毕;
2)按键2:播放“生日快乐”音乐;
3)按键3:温度传感器测试 温度高于31度时,蜂鸣器报警;
4)按键4:红外控制LED点灯。(注:红外模块对应NEC系列遥控器)
*****************************************************************************/
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
extern void infrared(void);
sbit E=P2^7; //1602使能引脚
sbit RW=P3^6; //1602读写引脚
sbit RS=P2^6; //1602数据/命令选择引脚
sbit DQ =P3^7; //DS18B20接P3^7口
sbit CE573=P2^5;
sbit BUZZER=P2^4;
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
sbit KEY4=P3^5;
sbit KEY5=P3^7;
code unsigned char digseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
// 0 1 2 3 4 5 6 7 8 9 A b C d E F
code unsigned char segsel[]={0xfe,0xfd,0xfb,0xf7};
//数码管段选
uchar code table[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};
//四位8段数码管共阳0——9
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//四位8段数码管带小数点共阳0——9
uint x;
//串口、中断、初始化设置子函数
//11.0592MH晶振下,波特率9600,无奇偶校验
/*void initmpu(void)
{
//定时器1的工作方式2
TMOD=0x20;
//装载计数初值
TL1=0xfd;
TH1=0xfd;
//采用串口工作方式1,无奇偶校验
SCON=0x50;
//串口波特率不加倍
PCON=0x00;
//开总中断,开串口中断
TR1=1;
IE=0x95;
}*/
void Delay(int m)
{
while(--m);
}
void test_led(void) //LED测试程序
{
int i;
P1=0x7F;
Delay(40000);
for(i=0;i<7;i++)
{
P1=P1>>1;
Delay(40000);
}
P1=0xFF;
Delay(40000);
P1=0x00;
Delay(40000);
P1=0xFF;
Delay(40000);
P1=0x00;
Delay(40000);
P1=0xFF;
}
void test_digseg(void) //数码管测试程序
{
char i,j;
CE573=1;
for(i=0;i<16;)
{
for(j=0;j<4;j++)
{
P2=segsel[j];
P0=digseg[i];
i++;
Delay(40000);
}
}
P2=0xF0; // 4只数码管同时开启
P0=0xFF;
Delay(50000);
P0=0x00;
Delay(50000);
P0=0xFF;
Delay(50000);
P0=0x00;
Delay(50000);
P0=0xFF;
}
void test_beep(char n) //蜂鸣器响N次
{
char i;
for(i=0;i<n;i++)
{
BUZZER=0;
Delay(9000);
BUZZER=1;
Delay(9000);
}
}
/*************** 定义按键 ************/
char check_K1(void)
{
if(KEY1==0)
{
Delay(2000);
{
if(KEY1==0)
{
return 1;
}
}
}
return 0;
}
char check_K2(void)
{
if(KEY2==0)
{
Delay(2000);
{
if(KEY2==0)
{
return 1;
}
}
}
return 0;
}
char check_K3(void)
{
if(KEY3==0)
{
Delay(2000); // 按键去抖
{
if(KEY3==0)
{
return 1;
}
}
}
return 0;
}
char check_K4(void)
{
if(KEY4==0)
{
Delay(2000);
{
if(KEY4==0)
{
return 1;
}
}
}
return 0;
}
code uchar dis1[] = {"Hello MCU WORLD "} ;
code uchar dis2[] = {"LET'S BEGINNING "} ;
code uchar send_txt[]= {"123*\n* 456 *\n* 789 *\n*"};
void test_serial()
{
int i;
EA=0;
for(i=0;i<sizeof(send_txt);i++)
{
SBUF=send_txt[i];
while(TI==0);
TI=0;
}
EA=1;
}
//char key1_flag=0;
//char key2_flag=0;
/*void ext_int0() interrupt 0 //外部中断0服务程序
{
EA = 0;
Delay(4000);
key1_flag=1;
EA = 1;
}
void ext_int1() interrupt 2 //外部中断1服务程序
{
EA = 0;
Delay(4000);
key2_flag=1;
EA = 1;
}
*/
void getch(void) interrupt 4 //中断源编号为4,即串口中断
{
uchar m;
EA=0;
RI=0;
m=SBUF;
if(m==0x80) //向开发板串口发送的数据
{
test_serial();
}
EA=1;
}
void _delay(uchar ms) // 延时子程序
{
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
void delay()
{
int i,j;
for(i=0; i<=100; i++)
for(j=0; j<=20; j++)
;
}
/************** LCD ***************************
/********************************************************************
* 名称 : enable(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void enable(uchar del)
{
P0 = del;
RS = 0;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
/********************************************************************
* 名称 : write(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write(uchar del)
{
P0 = del;
RS = 1;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
write(sign);
}
/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
while(1)
{
if(*p == '\0') break;
write(*p);
p++;
}
}
/********************************************************************
* 名称 : test_1602()
* 功能 : LCD主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void test_1602()
{
uchar i = 48;
L1602_init();
L1602_char(1,5,'b');
L1602_string(1,1," 0123456789 ");
L1602_string(2,1," ABCDEDGHIJ ");
}
/************* 18B20 ************************
/****************************************************************************/
void ds1820disp( uint tvalue1) ;
void display(uchar a1,uchar a2,uchar a3,uchar a4);
uint tvalue;
uchar disdata[]={0,0,0,0};
/****************************************************************************/
void delaytimer(void)
{
EA=1;
TMOD=0x10;
TL1=(65536-500)%256;
TH1=(65536-500)/256;
TR1=0;
ET1=1;
}
void timer() interrupt 3
{
TR1=0;
TH1=(65536-500)/256;
TL1=(65536-500)%256;
BUZZER=~BUZZER;
}
void delay_18B20( uint i) //延时
{
while(--i);
}
void delay2(uchar n) //延时
{
uchar i,j;
for(i=n;i>0;i--)
for(j=20;j>0;j--);
}
void ds1820rst() //初始化DS18B20
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
单片机实验程序(汇编).zip (65个子文件)
实验一跑马灯
test.c 782B
实验一.asm 481B
实验七 温度测量
温度显示汇编.asm 37KB
温度显示c语言.c 3KB
5.单片机间串行通信
1.C语言-双机串行通信
1.c 1KB
2.汇编-双机串行通信
1.asm 795B
实验五 蜂鸣器
蜂鸣器.asm 288B
蜂鸣器.c 1KB
6.单片机与PC机的通信
2.汇编-单片机与PC机的通信
1.asm 3KB
串行通信模块.uvproj 13KB
串行通信模块.uvopt 54KB
串行通信模块.hex 563B
STARTUP.OBJ 749B
1.OBJ 1KB
STARTUP.A51 6KB
1.LST 9KB
串行通信模块.plg 227B
STARTUP.LST 14KB
串行通信模块_uvopt.bak 55KB
串行通信模块_uvproj.bak 0B
串行通信模块.M51 5KB
串行通信模块 1KB
串行通信模块.lnp 45B
1.C语言-单片机与PC机的通信
test.c 2KB
7.温度显示与报警
2.C语言-温度显示器
1.c 3KB
1.汇编-温度的显示与报警源程序
test.asm 8KB
1.电子时钟
2.汇编-电子时钟
电子时钟.c 12KB
1.C语言-电子时钟
Test-1602.c 7KB
实验九 串口通信
串口通信.asm 338B
串口通信c语言.c 409B
2.LCD字符型液晶显示器
1.C语言LCD显示
Test-1602.c 1KB
2.汇编语言LCD显示
1.asm 2KB
实验八 数码管显示
数码管显示.c 1KB
数码管显示.asm 510B
4.交通灯控制
2.C语言-交通灯控制
交通灯第二种
Test-jtxhd.plg 1KB
Test-jtxhd_Uv2.Bak 2KB
Test-jtxhd.uvopt 55KB
Text-jtxhd.LST 9KB
Test-jtxhd.M51 9KB
Text-jtxhd 0B
Test-jtxhd.uvproj 13KB
Test-jtxhd 5KB
ExtDll.iex 19B
Test-jtxhd.opt.bak 994B
Test-jtxhd.Uv2.bak 2KB
Test-jtxhd.hex 2KB
Text-jtxhd.c 3KB
Test-jtxhd_uvopt.bak 55KB
Text-jtxhd.OBJ 6KB
Test-jtxhd.lnp 52B
1.汇编-交通灯控制
Text2.asm 1KB
实验三 中断计数
实验三.asm 714B
实验三.c 429B
8.红外接收与控制
1.C语言-红外接收与控制
1.c 12KB
2.汇编-红外接收与控制
1.asm 4KB
9.答辩倒计时器
1.汇编-答辩倒计时器
jishiqi.asm 17KB
2.C语言-答辩倒计时器
111111.c 3KB
实验四 按键计数
按键计数.c 1KB
按键计数.asm 399B
3.电子音调发生器
2.C语言-电子音调发生器
dianzi.c 6KB
1.汇编-电子音调发生器
dianziyindiao.asm 6KB
实验二 查询计数
实验二.asm 415B
实验二.c 667B
实验六 一分钟倒计时
一分钟倒计时.asm 868B
一分钟倒计时.c 1KB
共 65 条
- 1
树上小乌鸦
- 粉丝: 10
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0