標題: 基于51單片機數字示波器的設計 波形電路 [打印本頁]
作者: Nyx影 時間: 2017-5-11 19:05
標題: 基于51單片機數字示波器的設計 波形電路
本帖最后由 Nyx影 于 2017-5-11 20:50 編輯
[size=13.3333px] AD574A AT89C52單片機 19264液晶屏 來實現輸入信號波形顯示[size=13.3333px]proteus仿真不成功 請問前輩們,程序錯在了哪里。單片機完全無法驅動AD
#include <absacc.h>
#include <math.h>
#include <reg51.h>
sfr AUXR=0x8e ; /*允許讀寫STC89C52RD+片內擴展RAM*/
sfr AUXR1=0xa2 ;
char xdata caiyangdata[200] ; /*采樣值存儲變量,數組,相鄰兩
個存儲一個12位的采樣值,
前為高8位,后為低四位*/
char xdata Vin[100]; /*采樣點處輸入信號的電壓值*/
int gao4,zhong4,di4,di8;
float dv;
int COM,DAT; /*COM為液晶顯示的代碼入口地址,
DAT為數據入口地址*/
int b,n,p,d;
int i,j;
sbit C3=P2^5; /*右屏片選*/
sbit C2=P2^4; /*中屏片選*/
sbit C1=P2^3; /*左屏片選*/
sbit E=P2^2; /*使能信號線*/
sbit RW=P2^1; /*讀寫信號線*/
sbit RS=P2^0; /*寄存器選擇信號線*/
sbit CS=P2^7;
sbit A0=P2^6;
sbit RC=P3^4;
sbit CEWR=P3^6;
sbit CERD=P3^7;
void chushiint0() ; /*初始化INT0程序*/
void caiyang(); /*采樣子程序*/
void zhongduanint0(); /*INT0中斷服務程序*/
void AD574A(); /*啟動AD574A*/
void gao4ANDdi8(); /*采樣值高四位和低八位分離子程序*/
void DAC(); /*數字值到模擬值轉換 */
void yejingxianshi(); /*液晶顯示子程序*/
void chushiyejing(); /*液晶顯示初始設置子程序*/
void wrtDDRAM();
void prcode(); /*寫指令代碼子程序*/
void prcwdata(); /*寫顯示數據子程序*/
void prcrdata(); /*讀顯示數據子程序*/
void pbusy(); /*判忙子程序*/
void main()
{
chushiint0(); /*調用初始化INT0程序*/
AD574A(); /*啟動AD574A*/
caiyang(); /*調采樣子程序*/
gao4ANDdi8(); /*采樣值高四位和低八位分
離子程序,數字值到模擬值轉換*/
yejingxianshi(); /*調液晶顯示程序*/
}
void chushiint0()
{
IT0=1;
EX0=1;
EA=1;
}
/*ad啟動*/
void AD574A()
{
AUXR=0X01;
CEWR=0;
CERD=0;
CS=0;
A0=0;
RC=0;
}
/*ad采樣*/
void caiyang()
{
for(i;i<200;)
{
if(IE0==1) /*采用中斷查詢方式*/
{
zhongduanint0();
}
}
}
/*ad讀取AD采樣值*/
void INT0() interrupt 0 using 1
{
CEWR=0; /*讀取A/D轉換值高8位*/
CERD=0;
CS=0;
A0=0;
RC=1;
caiyangdata=P0;
i++;
CEWR=0; /*讀取A/D轉換值高4位*/
CERD=0;
CS=0;
A0=1;
RC=1;
caiyangdata=P0; /*讀取低4位*/
i++;
}
void gao4ANDdi8() /*采樣值高四位和低八位分離子程序*/
{
for(i=0,j=0;i<200,j<100;i+2,j++)
{
gao4= caiyangdata&0xf0;
gao4=gao4 >> 4;
zhong4=caiyangdata&0x0f;
zhong4=zhong4 << 4;
di4=caiyangdata[i+1] >> 4;
di8=zhong4+di4;
DAC();
}
}
void DAC() /*數字值到模擬值轉換 */
{
int VFS=10;
Vin[j]=((gao4*256+di8)/2048-1)*VFS/2 ;
}
void yejingxianshi() /*調液晶顯示程序*/
{
chushiyejing();
for(j=0;j<100;j++)
{
dv=5.0/60.0; /*相鄰兩行的電壓差*/
n=62-Vin[j]/dv; /*顯示點所在行數*/
p=n/8; /*顯示點所在頁數*/
b=n%8; /*顯示點在第P頁的第J個單元的第B位*/
d=1; /*第P頁第J個單元的值*/
i=B;
for(i;i>0;i--)
{
d*=2;
}
wrtDDRAM();
}
}
void chushiyejing() /*液晶顯示設置*/
{
C1=1; /*左區設置*/
C2=0;
C3=0;
COM=0xc0; /*設置顯示起始行為第一行*/
prcode();
COM=0x3f; /*開顯示設置*/
prcode();
COM=0x40; /*列地址設置為0*/
prcode();
C1=0; /*中區設置*/
C2=1;
C3=0;
COM=0xc0;
prcode();
COM=0x3f;
prcode();
COM=0x40;
prcode();
}
void wrtDDRAM()
{
if(j<64)
{
C1=1; /*左區顯示數據寫入*/
C2=0;
C3=0;
COM=P||0xb8 ; /*或頁面地址*/
prcode();
DAT=d;
prcwdata(); /*寫入待顯示數據*/
}
else if((j>64)&&(j<100))
{
C1=0; /*右區顯示數據寫入*/
C2=1;
C3=0;
COM=P||0xb8; /*或頁面地址*/
prcode();
DAT=d;
prcwdata(); /*寫入待顯示數據*/
}
}
void prcode() /*寫指令代碼子程序*/
{
pbusy();
RW=0;
P1=COM; /*寫指令代碼*/
E=1;
E=0;
}
void prcwdata() /*寫顯示數據子程序*/
{
pbusy();
RS=1;
RW=0;
P1=DAT;
E=1;
E=0;
}
void prcrdata() /*讀顯示數據子程序*/
{
pbusy();
RS=1;
P1=0xff;
E=1;
DAT=P1;
E=0;
}
void pbusy()
{RW=1;
while(ACC^7) /*判“忙“標志為0否,否再讀*/
{
P1=0xff;
E=1;
ACC=P1;
E=0;
}
}
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling boxing.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?PRCRDATA?BOXING
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ZHONGDUANINT0
MODULE: boxing.obj (BOXING)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ZHONGDUANINT0
MODULE: boxing.obj (BOXING)
ADDRESS: 0D68H
Program Size: data=37.0 xdata=300 code=1517
creating hex file from "boxing"...
"boxing" - 0 Error(s), 3 Warning(s).
-
QQ圖片20170511190220.png
(49.03 KB, 下載次數: 65)
下載附件
2017-5-11 19:02 上傳
作者: 666562323 時間: 2017-5-12 10:59
#include<reg52.h>
#include<intrins.h>//循環函數的頭文件
#define uint unsigned int
#define uchar unsigned char
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//從低位往高位移一個燈
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//從高位往低位移一個燈
uchar code table2[]={0xfe,0xfa,0xf8,0xf0,0xe0,0xa0,0x80,0x00};//從低位到高位逐步全部點亮
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//從高位到低位逐步全部點亮
uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//從低位到高位逐步全部熄滅
uchar code table5[]={0x80,0xa0,0xe0,0xf0,0xf8,0xfa,0xfe,0xff};//從高位到低位逐步全部熄滅
uchar code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//從低位到高位,滅一個燈移動
uchar code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//從高位到低位,滅一個燈移動
uchar i;
void delay(uint z) //延時函數
{
uint x,y;
for(x=z;x>0;x--)
for(y=314;y>0;y--);
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void deng123()//
{
for(i=0;i<8;i++)
{
P2=table1[i];
P0=table1[i];
delay(25);
}
}
/***********************************************
************************************************/
void deng0()//所有燈亮一會兒
{
P0=0x00;P1=0x00;P2=0x00;P3=0x00;
delay(150);
}
/////////////////////////////////
void deng0_1()//所有燈滅一會兒
{
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
delay(150);
}
//////////////////////////////////////
void deng1()//兩列燈順時針旋轉2遍,然后逐漸降低
{
uchar c;
P1=0x00;P3=0x00;
for(c=2;c>0;c--)
{
deng123();
}
////////////////
P1=0x03;
deng123();
/////////////////
P1=0x0f;
deng123();
////////////////
P1=0x3f;
deng123();
///////////////
P1=0xff;
deng123();
////////////////////////
P3=0x03;
deng123();
//////////////
P3=0x0f;
deng123();
//////////////
P3=0x3f;
deng123();
/////////////
P3=0xff;
deng123();
P2=0xff;P0=0xff;
}
///////////////////////////////////////////////
void deng2()//四列燈順時針旋轉2遍
{
uchar a;
uchar b;
b=0x77;
P2=b;
P0=b;
P1=0x00;P3=0x00;
for(a=4;a>0;a--)
{
for(i=0;i<8;i++)
{
b=_cror_(b,1);//循環左移
delay(25);
P2=b;
P0=b;
}
}
P2=0xff;P0=0xff;P1=0xff;P3=0xff;
}
//////////////////////////////////////////////
void deng3()//單層,向上升
{
P0=0x00;
P2=0x00;
for(i=0;i<8;i++)
{
P3=table1[i];
delay(25);
}
P3=0xff;
/*----------------------*/
for(i=0;i<8;i++)
{
P1=table1[i];
delay(25);
}
P1=0xff;
}
/////////////////////////////////////////
void deng4()//單層,向下降
{
P2=0x00;P0=0x00;
for(i=0;i<8;i++)
{
P1=table0[i];
delay(25);
}
P1=0xff;
/*----------------------*/
for(i=0;i<8;i++)
{
P3=table0[i];
delay(25);
}
P3=0xff;P1=0xff;P0=0xff;P2=0xff;
}
/////////////////////////////////////////
void deng5()//從上到下,逐層全部點亮】
{
P0=0x00;P2=0x00;
for(i=0;i<8;i++)
{
P1=table2[i];
delay(25);
}
for(i=0;i<8;i++)
{
P3=table2[i];
delay(25);
}
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
}
////////////////////////////////////////
void deng6()//從上到下,逐層全部熄滅】
{
P0=0x00;P2=0x00;
P1=0x00;P3=0x00;
for(i=0;i<8;i++)
{
P1=table4[i];
delay(25);
}
P1=0xff;
for(i=0;i<8;i++)
{
P3=table4[i];
delay(25);
}
P3=0xff;
P0=0xff;P2=0xff;
}
///////////////////////////////////
void deng7()//四組燈,交替兩次
{
for(i=2;i>0;i--)
{
P1=0x00;P2=0x00;//上左
delay(40);
P1=0xff;P2=0xff;
delay(40);
/////////////
P3=0x00;P0=0x00;//下右
delay(40);
P3=0xff;P0=0xff;
delay(40);
/////////////
P3=0x00;P2=0x00;//下左
delay(40);
P3=0xff;P2=0xff;
delay(40);
/////////////
P1=0x00;P0=0x00;//上右
delay(40);
P1=0xff;P0=0xff;
delay(40);
}
}
void deng8()//上半先逐步列點亮,然后再向下點點亮
{
P0=0xff;P2=0xff;P3=0xff;
P1=0x00;
for(i=0;i<8;i++)
{
P0=table3[i];
P2=table3[i];
delay(25);
}
delay(70);
P1=0x00;P2=0x00;P0=0x00;
for(i=0;i<8;i++)
{
P3=table2[i];
delay(25);
}
}
//////////////////////////////////////
void deng9()//從中間向上、下點亮,再熄滅
{
P0=0x00;P2=0x00;
for(i=0;i<8;i++)
{
P1=table3[i];
P3=table2[i];
delay(25);
}
for(i=0;i<8;i++)
{
P1=table4[i];
P3=table5[i];
delay(25);
}
}
///////////////////////////////////////////
void deng10()//從中間向上、下熄滅
{
P0=0x00;P2=0x00;
for(i=0;i<8;i++)
{
P1=table5[i];
P3=table4[i];
delay(25);
}
P1=0xff;P3=0xff;
}
void deng11()//逆時針逐列點亮所有燈
{
P1=0x00;P3=0x00;
P0=0xff;P2=0xff;
for(i=0;i<8;i++)
{
P0=table2[i];
delay(25);
}
for(i=0;i<8;i++)
{
P2=table2[i];
delay(25);
}
P0=0xff;P2=0xff;P3=0xff;P1=0xff;
}
///////////////////////////////////////////
void deng12()//閃爍
{
uchar i;
uchar b;
b=0xaa;
P2=b;
P0=b;
P1=b;
P3=b;
for(i=0;i<8;i++)
{
b=_cror_(b,1);//循環左移
delay(50);
P2=b;
P0=b;
P1=b;
P3=b;
}
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
}
void deng13()//兩層燈,分別從中間向上、下移動
{
P2=0x00;P0=0x00;
for(i=0;i<8;i++)
{
P1=table1[i];
P3=table0[i];
delay(25);
}
P2=0xff;P0=0xff;P1=0xff;P3=0xff;
}
void deng14_1()//點滿一圈的小函數(限內部用)
{
P2=0xff;P0=0xff;
for(i=0;i<8;i++)
{
P2=table2[i];
delay(15);
}
for(i=0;i<8;i++)
{
P0=table2[i];
delay(15);
}
P2=0xff;P0=0xff;
}
///////////////////////////
void deng14()//從下開始,點滿一圈后,滅,再上升點亮第二圈
{
P1=0xff;
P3=0x7f;//1層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xbf;//2層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xdf;//3層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xef;//4層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xf7;//5層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xfb;//6層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xfd;//7層
deng14_1();//點滿一圈的小函數(限內部用)
P3=0xfe;//8層
deng14_1();//點滿一圈的小函數(限內部用)
//////////////////
P3=0xff;
P1=0x7f;//1層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xbf;//2層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xdf;//3層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xef;//4層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xf7;//5層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xfb;//6層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xfd;//7層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xfe;//8層
deng14_1();//點滿一圈的小函數(限內部用)
P1=0xff;
}
/*====================================================
===================主函數君===========================
======================================================*/
void main()
{
while(1)
{
deng0_1();//所有燈滅一會兒
deng0_1();//所有燈滅一會兒
deng14();//從下開始,點滿一圈后,滅,再上升點亮第二圈
deng4();//單層,向下降
deng5();//從上到下,逐層全部點亮
deng6();//從上到下,逐層全部熄滅】
deng8();//上半先逐步點亮,然后再向下點亮
deng0();//所有燈亮一會
deng6();//從上到下,逐層全部熄滅】
deng9();//從中間向上、下點亮,再熄滅
deng9();//從中間向上、下點亮,再熄滅
deng0_1();//所有燈滅一會兒
deng11();//逆時針逐列點亮所有燈
deng10();//從中間向上、下熄滅
deng0_1();//所有燈滅一會兒
deng13();//兩層燈,分別從中間向上、下移動
deng3();//單層,向上升
deng5();//從上到下,逐層全部點亮
deng12();//閃爍
deng12();//閃爍
deng2();//四列燈順時針旋轉2遍
deng1();//兩列燈順時針旋轉2遍,然后逐漸降低
deng0_1();//所有燈滅一會兒
}
}
作者: bayga456 時間: 2017-5-12 11:35
之前想過用51做示波器,看了我又想起來了。
作者: Nyx影 時間: 2017-5-12 13:20
您好。。這個和我的有關系么~如果我沒猜錯的話,前面看出來這是點亮數碼管的程序吧~
作者: wsz_wsz 時間: 2017-5-12 15:04
雖然很長 但也看完了
作者: Nyx影 時間: 2017-5-12 17:43
經過修改,最后發現 void prcrdata() 函數 沒有被程序調用。。。請問前輩們,這個函數應該插入到哪里呢?
作者: HUANGHFS 時間: 2017-5-12 21:39
很好,做得借鑒。
作者: Nyx影 時間: 2017-5-13 15:40
sad,沒有一個人解答 。。。。
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲精品粉嫩美女一区
|
亚洲日韩中文字幕一区
|
91超碰caoporn97人人
|
天天综合网永久
|
九一在线
|
欧日韩在线观看
|
亚洲精品一区中文字幕乱码
|
在线观看国产视频
|
免费h视频
|
午夜免费精品视频
|
欧美精品在线一区二区三区
|
日韩av免费在线观看
|
免费一区在线观看
|
99在线免费观看
|
中文字幕在线观看国产
|
亚洲不卡|
另类在线
|
人人干人人看
|
日韩 欧美 综合
|
国产激情视频
|
欧洲精品码一区二区三区免费看
|
国产日韩欧美二区
|
亚洲日日操|
亚洲一区二区免费视频
|
国产精品国产三级国产aⅴ中文
|
成人免费在线小视频
|
99视频在线免费观看
|
另类专区亚洲
|
一本一道久久a久久精品综合蜜臀
|
国产精品一二三区
|
亚洲国产精品suv
|
亚洲天堂久久
|
成人福利片
|
成人做爰69片免费观看
|
亚洲电影第1页
|
在线免费观看黄网
|
中文字幕一级
|
免费毛片网站在线观看
|
黄色福利|
亚洲国产精品一区在线观看
|
亚洲精品一区在线
|