资源简介
用D/A转换器输出一个正弦波,频率从20Hz~5KHz,采用矩阵式按键,由按键直接四位数指定频率,8052的定时器2定时输出。文件包含电路图和设计程序,及全部仿真文件可直接运行。

代码片段和文件信息
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define DAC0832 XBYTE[0x7fff]
#define KEY_PORT P1
uchar code DSY_CODE[]=
{
0x800xb10xda0xf50xff0xf50xda0xb10x800x4f0x260x0b0x010x0b0x260x4f
};
float tdelay ;//每个点延时的时间
unsigned char keyNum=0xff;
unsigned char SetFreq_flag=0;//设置频率的标志
uint exchangeusuuj;
uint mntcaaa;
uint pinlv=1000;
uint g_Period;
//void DelayMS(uint u)//延时程序单位为10微秒
//{
// uchar i;
// while(u--)
// {
// for(i=0;i<120;i++);
// }
//}
void DelayMs( unsigned int ms)
{
unsigned int ij;
for (i = 0; i < ms; i++)
for(j=0;j<124;j++);
}
// #define cv 1024 // 10000次计数,60MHz时钟时定时2mS
void init_T2() // 定时器2初始化
{ T2CON =0; // 设定T2自动重装模式
T2MOD =0;
RCAP2H =(65536-us)/256;
RCAP2L =(65536-us)%256;
TH2 =(65536-us)/256;
TL2 =(65536-us)%256;
ET2 = 1; // 开T2中断
PT2 = 1; //T2 中断高优先级
TR2 = 1; //启动T2
}
unsigned char keyScan(void)
{
unsigned char key=0xff;
unsigned char temptemp1temp2;
KEY_PORT=0XF0;
if( (KEY_PORT& 0XF0) !=0XF0)
{
EA=0;
DelayMs(10);
if( (KEY_PORT & 0XF0) !=0XF0)
{
temp1= KEY_PORT & 0XF0;
KEY_PORT=0X0f;
DelayMs(10);
temp2= KEY_PORT & 0X0f;
while((KEY_PORT & 0X0f) !=0X0f);//等待按键释放
temp=temp1|temp2;
switch(temp)
{
case 0xee:key=1;break;
case 0xde:key=2;break;
case 0xbe:key=3;break;
case 0x7e:key=4;break;
case 0xed:key=5;break;
case 0xdd:key=6;break;
case 0xbd:key=7;break;
case 0x7d:key=8;break;
case 0xeb:key=9;break;
case 0xdb:key=0;break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
default:break;
}
}
EA=1;
}
return key;
}
void main()
{
EA=1;
EC=1;
CR=1;
us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间
us=5*floor(tdelay); //每个点需要延时多少个微秒
init_T2();
while(1) //循环输出正弦
{
keyNum=keyScan(); //按键选择控制函数
if(keyNum!=0xff)
{ EA=0;
if(keyNum==10 && SetFreq_flag==0) //A键 进入设置频率状态
{
SetFreq_flag=1;
pinlv=0;
}
else if(keyNum<10 && SetFreq_flag==1)//数字键 输入频率
{
pinlv=pinlv*10+keyNum;
}
else if(keyNum==10 && SetFreq_flag==1)//A键 HZ确定输出
{
SetFreq_flag=0;
EA=1;
}
EA=1;
us=500;
g_Period=floor(1000000/pinlv );
tdelay=g_Period/16; //获得每个点需要延时的时间
us=5*floor(tdelay); //每个点需要延时多少个微秒
init_T2();
}
for(j=0;j<16;j++)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-05 20:02 单片机作业C51\
文件 1397 2018-10-27 20:20 单片机作业C51\absacc.h
文件 19649 2018-10-27 20:36 单片机作业C51\Last Loaded zyk.pdsbak
文件 1197 2018-10-27 20:21 单片机作业C51\math.h
文件 3088 2018-10-27 20:24 单片机作业C51\reg51f.h
文件 6376 2009-05-07 14:37 单片机作业C51\STARTUP.A51
文件 14054 2018-10-27 20:24 单片机作业C51\STARTUP.LST
文件 749 2018-10-27 20:24 单片机作业C51\STARTUP.OBJ
文件 19684 2018-10-27 20:38 单片机作业C51\zyk.pdsprj
文件 2400 2018-12-23 14:31 单片机作业C51\zyk.pdsprj.LAPTOP-P90I1490.HP.workspace
文件 3522 2018-10-27 20:17 单片机作业C51\zz.c
文件 8389 2018-10-27 20:24 单片机作业C51\zz.LST
文件 10347 2018-10-27 20:24 单片机作业C51\zz.OBJ
文件 11334 2018-10-27 20:24 单片机作业C51\zzz
文件 6475 2018-10-27 20:24 单片机作业C51\zzz.hex
文件 53 2018-10-27 20:24 单片机作业C51\zzz.lnp
文件 13536 2018-10-27 20:24 单片机作业C51\zzz.M51
文件 165 2018-11-14 15:21 单片机作业C51\zzz.plg
文件 71791 2018-12-05 20:02 单片机作业C51\zzz.uvgui.HP
文件 5435 2018-11-14 15:24 单片机作业C51\zzz.uvopt
文件 12200 2018-11-14 15:24 单片机作业C51\zzz.uvproj
文件 58125 2018-10-27 20:39 单片机作业C51\zzz_uvopt.bak
文件 0 2018-10-27 20:14 单片机作业C51\zzz_uvproj.bak
- 上一篇:51单片机计算器
- 下一篇:WiFi介绍及技术原理
相关资源
- Wolfram Mathematica 矩阵初等变换函数(
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 旋转矩阵求欧拉角的简单算法
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 三维重建(旋转)由已知对应图像点
- 矩阵基本运算函数库
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 用矩阵类算法程序和最小二乘法
- 基于8051单片机的红外接收程序
- 图的邻接矩阵存储和邻接表存储
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- c 编写的 矩阵 matrix 类源码
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- VC 实现鼠标画矩形和绘制直线
- 图书管理系统需求跟踪矩阵表.rar
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
评论
共有 条评论