📄 lesson.c
字号:
//**********************************************************************************
//**********************************************************************************
//DX-51多功能试验板的试验课程函数模块
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
#include "study.h"
//*****************************
//设置液晶的灰度
void setlcdlight(void)
{
uchar ch;
cls(8); setcursor(0,0); //显示提示
lcdstring("按UP变黑\r\n按DOWN变淡\r\n按ENTER退出\r\n当前灰度:");
while(1)
{
setcursor(9,6);
lcddigit(lcdlight); //打印当前灰度
ch=getkey(1000); //取键值
switch(ch)
{
case 'U': //按up的处理
light(lcdlight++); //灰度加1,送入液晶
if(lcdlight>63)lcdlight=63; //设置上限
break;
case 'D': //按down键的处理
light(lcdlight--); //灰度减1
if(lcdlight<1)lcdlight=1; //设置下限
break;
case 'C': //按cacel或者enter退出
case 'Y':
return;
}
}
}
//*******************************************
//走马灯试验
sbit LED1=P1^0; //定义发光管的对应管脚位置
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
void led4(void)
{
uint n;
cls(8);
setcursor(0,0);
lcdstring("4个LED正在做跑马灯运动,任意键退出。");
do
{
LED4=1; //点亮一个灯,灭掉一个灯
LED1=0;
for(n=0;n<30000;n++); //延时
LED1=1;
LED2=0;
for(n=0;n<30000;n++);
LED2=1;
LED3=0;
for(n=0;n<30000;n++);
LED3=1;
LED4=0;
for(n=0;n<30000;n++);
}while(getkey(1)==0); //有键按下结束
}
//**************************
//通讯试验
void common(void)
{
uchar c;
cls(8);setcursor(0,0);
lcdstring("通讯波特率38400bps.按任意键开始。");
while(getkey(1000)==0); //等待按键
cls(8);setcursor(0,0);
lcdstring("所按键值都会送到串口,在计算机显示。按CANCEL退出。");
putstring("所有在此窗口按键都会送往单片机并在液晶显示出来。按ESC退出。\r\n");
while(1)
{
while(inbufsign) //如果有串口数据到来则处理数据
{
c=getbyte(); //取出一个串口缓冲区的数据
if(c==0x11)break;//过滤掉全速运行时KEIL发出的联机字符"0x11"
beep(1); //发一声提示音
putbyte(c); //反显到计算机
lcdchar(c); //打印到屏幕
if(c==0x1b) //如果收到ESC则退出
return;//收到计算机发出的ESC退出接收测试继续运行
}
if((c=getkey(1000))=='C') //如果按键cacel则退出
return;//
else if(c!=0) //如果其他按键,将该键值送到串口
putbyte(c);
}
}
//**************************************************
//试验课程
void lesson(void)
{
uchar ch;
uchar xdata *x;
while(1)
{
UPM: cls(8); //显示提示信息
setcursor(0,0);
lcdstring("1灰度2跑马灯\r\n3串口4读闪存\r\n5唱歌6游戏↓");
MEMU: while((ch=getkey(1000))==0); //等待按键
switch(ch)
{
case '1': //设置灰度
setlcdlight();
break;
case '2': //跑马灯
led4();
break;
case '3': //通讯试验
common();
break;
case '4': //读flash内容
readflash();
break;
case '5': //唱歌
playmusic();
break;
case '6':
break;
case '7':
//测试外部内存,运行完这个循环,x=0x8000则正常
cls(8);setcursor(0,0);
for(x=0;x<0x8000;x++)
{
ch=*x; //保存该地址的值
*x=0xaa; //写入0xaa,读出检测
if(*x!=0xaa)
break;
*x=0x55; //写入0x55,读出检测
if(*x!=0x55)
break;
*x=ch; //恢复该地址的值
}
if(x==0x8000)
{
lcdstring("32K外部内存全部正常!");
beep(10);// 哔一声内存检测正常
}
else
{
lcdstring("外部内存不正常!请检查。");
beep(100);
}
lcdstring("任意键退出。");
while(getkey(1)==0);
break;
case '8': //写文件
write_file();
break;
case '9':
break;
case '0':
break;
case 'D': //下一页菜单
cls(8);
setcursor(0,0);
lcdstring("7内存检测 ↑\r\n8写文件9.USB\r\n0网卡通讯");
goto MEMU;
case 'U': //回到上一页菜单
goto UPM;
case 'C': //按cancel退出到首页面,其实是程序软复位
((void(code *)(void))0x0000)();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -