⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson.c

📁 此文档是网上一款开发板的完整系统,内附有电路图纸!系统有完整的接口程式,包含了字符型LCD驱动,pc串口通讯程式,flash读写驱动程式,中文字库,ad芯片驱动程式,keyscan4*4扫描程式
💻 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 + -