河南机电高等专科学校。
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秒钟...