C51大作业

发布 2023-05-17 06:29:28 阅读 9141

河南机电高等专科学校。

c51程序设计》大作业。

设计题目: 数字示波表

班级: 应电 092

学号: 090415119

姓名: 吴君堂

成绩。2023年11月。

1 设计任务。

1)用单片机stc12c5a60s2为主控芯片设计一数字示波表。

2)能对连续信号进行采集并实时显示,且具有锁存功能。

3)测量电压幅度范围在规定范围内,误差应控制在一定范围以内。

4)测量频率范围在规定范围内,误差应控制在一定范围以内。

5)用继电器控制电路来实现交直流藕合方式切换。

6)用3*4矩阵键盘实现一些控制操作。如v/格、time/格的调节,交直流藕合方式的选择,屏幕的锁定等等。

7)led电路来指示程序的运行状态。

8)用液晶模块显示波形。

9)系统用78和79系列三端集成稳压块提供所需稳定直流电压。

2电路原理图。

3 系统流程图。

4 源程序。

**此程序是采用st7920为主控芯片的128*64lcd点阵屏(ym12864)mcu采用的是stc12c5a60s2构成的数字示波器。

128*64其实是256*32人为地将它分成上下两块。现在将12864分为x轴0-127列,y轴0-63行,那么y轴第0行和y轴。

第32行其实是共用了同一个y地址,也就是y轴0-31与32-63的y地址都是0-31,不同的是x地址**/

#include <>

#define uchar unsigned char

#define uint unsigned int

sfr p1asf = 0x9d;

sfr adc_contr = 0xbc;

sfr adc_res = 0xbd;

sfr adc_resl = 0xbe;

sfr auxr1 = 0xa2;

sbit rs = p0^5;

sbit rw = p0^6;

sbit en = p0^7;

sbit ret = p0^4;

sbit jdq = p1^4;

sbit fmq = p1^7;

sbit led1 = p1^5;

sbit led2 = p1^6;

sbit by = p2^7;

#define dataport p2

uchar code key=描点数组定义8个点的值。

uchar tab2[128];

uchar tab3[16];

uchar freq,vv=4;

void nop()

void delay(uint z)

uint x,y;

for(y=z;y>0;y--)

for(x=1495;x>0;x--)

void lcd_busy判忙。

rs=0;rw=1;dataport=0xff;

while(1)

en=0;void wcomd(uchar c写命令。

lcd_busy();

rs=0;rw=0;

en=1;nop();

nop();

nop();

dataport=c;

en=0;void wdata(uchar d写数据。

lcd_busy();

rs=1;rw=0;

en=1;nop();

nop();

nop();

dataport=d;

en=0;void reset()

ret=0;

delay(1);

ret=1;

void lcd_init()

reset();

wcomd(0x30); 功能设定(8位指令,基本功能)

wcomd(0x04); 显示器控制。

wcomd(0x01); 清屏。

wcomd(0x0c); 整体显示。

uchar ad()

uchar temp;

p1asf=0x03p1.0,p1.1选为模拟量输入通道p1.0为1:1 p1.1为10:1

adc_contr=0x80开启ad电源,ad通道选为1:1

adc_contr=adc_contr|freq; /time/格选择。

nop();

adc_contr=adc_contr|0x08; /开始ad转换。

while(1等待ad转换完成。

led2=1;

adc_contr=adc_contr&0xe0;

temp=adc_res;

***if来实现量程的自动转换。

if(temp==0xff如果temp的值为ff则1:1通道的模拟值大于5v

此时的值不准,需用10:1通道。

adc_contr=0x81开启ad电源,ad通道选为10:1

adc_contr=adc_contr|freq; /time/格选择。

nop();

adc_contr=adc_contr|0x08; /开始ad转换。

while(1等待ad转换完成。

adc_contr=adc_contr&0xe1;

temp=adc_res;

return temp;

清屏***/在送显示数据之前给全屏送0,清除全屏。

void lcd_clr()

uchar i,k;

for(k=0;k<32;k

写屏的一线数据。

/先写y地址再写x地址(x地址会自加1)接着写16位的数据。

void lcd_xy(uchar x,uchar y,uchar data1,uchar data2)

if(y<32y小于32表示要显示的部分在屏的下半部。

elsey大于32表示要显示的部分在屏的上半部。

wdata(data1);

wdata(data2);

lcd显示子程序。

void display()

uchar i,k,x,y,z,hh1,hh2,temp1;

lcd_init();

wcomd(0x34设置为扩展指令集绘图功能关。

wcomd(0x01待命。

lcd_clr清屏。

for(k=0;k<16;k++)tab3[k]=0全部清0,便于以后存数。

for(i=0;i<64;i分别取出y轴64个点。

for(k=0;k<8;k写一行数据。

for(k=0;k<16;k++)tab3[k]=0;//全部清0,便于下次存数。

}wcomd(0x36开显示

键盘扫描子程序。

/返回键值。

uchar kkey()

uchar key1,key2,i;

p3=0xf0;

key1=p3;

if(key1!=0xf0)

for(i=0;i<12;i++)

return i;

初始化子程序。

void init()

en=0;rs=0;

rw=0;lcd_init();

adc_contr=0xe1打开ad转换电源。

delay(5打开ad转换电源后需要延时一段时间。

void main()

uchar i,key1;

bit aa;

key1=0xff;

freq=0x60;

while(1)

init();

for(i=0;i<128;i采集一行数据128个点。

tab2[i]=ad()/vv幅值变换,将256个y值变成64个改变vv可以改变y幅值。

C51大作业

河南机电高等专科学校。c51程序设计 大作业。设计题目 报警器 班级。学号。姓名。成绩。2012年5月。报警器。一设计任务。利用开关控制报警器,当开关闭合报警信号报警,当开关断开告警信号停止,并编写程序。二设计原理。500hz音频信号的周期为2ms,信号电平为每1ms变反1次 1khz的信号周期为1...

C51大作业

c51程序设计 大作业。设计题目。班级。学号。姓名。成绩。1 设计任务。本次密码锁的设计,其主要具有如下功能 1 设置6位密码,密码通过键盘输入,弱密码正确,则将锁打开。2 密码可以由用户自己修改设定 6位密码 密码输入正确才能修改密码。修改密码之前必须再次输入密码,再输入新密码之前需要二次确认,以...

C51大作业

河南机电高等专科学校。c51程序设计 大作业。设计题目 篮球计时计分器 班级 医电 101 班 学号 1 0 0 4 1 1 1 0 8 姓名 任天意 成绩。2012年5月20 1 设计任务 该篮球计时计分器,采用了80c51作为主要的控制部件,利用它的内部定时器实现计时50ms,然后软件实现1秒钟...