標(biāo)題:
單片機(jī)應(yīng)力測試儀程序
[打印本頁]
作者:
Tiramisu521
時(shí)間:
2020-4-23 15:52
標(biāo)題:
單片機(jī)應(yīng)力測試儀程序
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ad0_7 P0 //AD轉(zhuǎn)換數(shù)字量輸出
void disp(uchar);
void dig_trans(uchar);
void RTL_C();
void long_delay(void); //長延時(shí)約120us
void short_delay(void); //短延時(shí)約8us
void delay10ms(uchar); //延時(shí)10ms
void longdelay(uint time);
//************7279子程序聲明*******
void init_7279(void);
void write7279(uchar cmd,uchar dta); //寫入到HD7279
uchar read7279(uchar); //從HD7279讀出
void send_byte(uchar); //發(fā)送一個(gè)字節(jié)
uchar receive_byte(void); //接受一個(gè)字節(jié)
//************AD轉(zhuǎn)換子程序聲明******
void start_ad(void);
read_ad();
avr_read_ad();
uchar digit[4];
uchar key_number,j,k;
uint tmr;
unsigned long wait_cnter;
//*************語音轉(zhuǎn)換子程序*******
void SC_Speech(uchar cm);
void SC_WBusy(void);
void SC_Speechs(void);
void init_SC(void); //sc1010初始化
sbit SC_RST=P3^0; //脈沖復(fù)位
sbit SC_DATA=P3^1; //脈沖數(shù)據(jù)
sbit SC_BUSY=P3^2; //放音busy
uint sp[8]; //組合語音數(shù)組變量
sbit AD_CS=P1^0;//芯片選擇信號(hào),控制芯片的啟動(dòng)和結(jié)果讀取,低電平有效
sbit AD_CLK=P1^1;//讀數(shù)據(jù)控制,低電平有效
sbit AD_DI=P1^2;//AD轉(zhuǎn)換啟動(dòng)控制,上升沿有效
sbit AD_DO=P1^3;//AD轉(zhuǎn)換結(jié)束輸出低電平
sbit cs=P2^0;//7279片選
sbit clk=P2^1;
sbit dat=P2^2;
sbit key=P2^3;
sbit buzzer=P2^7;
//***** HD7279 指令 *****
#define CMD_RESET 0xa4
#define CMD_TEST 0xbf //測試
#define DECODE0 0x80 //譯碼方式
#define DECODE1 0xc8 //譯碼方式
#define CMD_READ 0x15 //讀
#define UNDECODE 0x90 //譯碼方式:不譯碼
#define RTL_CYCLE 0xa3 //循環(huán)左移
#define RTR_CYCLE 0xa2 //循環(huán)右移
#define RTL_UNCYL 0xa1 //左移
#define RTR_UNCYL 0xa0 //右移
#define ACTCTL 0x98 //消影
#define SEGON 0xe0 //段亮
#define SEGOFF 0xc0 //段滅
#define BLINKCTL 0x88 //閃爍
void main(){
//init_SC();
init_7279();
buzzer=1;
while(1){
//for(tmr=0;tmr<0x2000;tmr++);//上電延時(shí)
//send_byte(CMD_RESET);
//start_ad();//啟動(dòng)AD
// long_delay();
disp(avr_read_ad());
//SC_Speechs();
delay10ms(200);
}
}
/*
//***********啟動(dòng)AD轉(zhuǎn)換子程序*********
void start_ad(void){
ad_cs=0;//允許進(jìn)行AD轉(zhuǎn)換
ad_wr=0;
_nop_();
ad_wr=1;//WR由低變高時(shí),AD開始轉(zhuǎn)換
while(ad_intr);
ad_cs=1;//停止AD轉(zhuǎn)換
}
//************讀AD數(shù)據(jù)子程序**********
read_ad(){
uchar ad_data;
ad0_7=0xff;
ad_cs=0;//允許讀
ad_rd=0;//讀取轉(zhuǎn)換數(shù)據(jù)結(jié)果
_nop_();
ad_data=ad0_7;//把數(shù)據(jù)存到ad_data中
ad_rd=1;
ad_cs=1;//停止AD讀取
return(ad_data);
}*/
int adc_0832()
{
uint tmp=0;
uint a,b;
AD_CS=0;
AD_CLK=0;
AD_DI=1;
_nop_();
_nop_();
AD_CLK=1;
_nop_();
_nop_();
AD_CLK=0;
AD_DI=1;
_nop_();
_nop_();
AD_CLK=1;
_nop_();
_nop_();
AD_CLK=0;
AD_DI=0;
_nop_();
_nop_();
AD_CLK=1;
_nop_();
_nop_();
AD_CLK=0;
_nop_();
_nop_();
for(a=0;a<8;a++)
{
AD_CLK=1;
_nop_();
_nop_();
AD_CLK=0;
_nop_();
_nop_();
tmp|=AD_DO;
if(a<7)
tmp<<=1;
}
for(b=0;b<8;b++)
{
AD_CLK=1;
_nop_();
_nop_();
AD_CLK=0;
_nop_();
_nop_();
}
AD_CS=1;
return tmp;
}
//************AD轉(zhuǎn)換8次取平均**********
avr_read_ad(){
uint i;
uint average,max,min,sum;
uint array[8];
sum=0;
for(i=0;i<8;i++){
//start_ad();
array[i]=adc_0832();
}
max=array[0];
min=array[0];
for(i=0;i<8;i++){
if(max<array[i])
max=array[i];
if(min>array[i])
min=array[i];
sum=sum+array[i];
}
average=(sum-max-min)/6;
return average;
}
//********顯示***********
void disp(uchar ad_data){
uint a;
digit[3]=(ad_data-0x08)*400/51%10;
digit[2]=(ad_data-0x08)*40/51%10;
digit[1]=(ad_data-0x08)*40/51%100/10;
digit[0]=(ad_data-0x08)*40/51/100; //百位
/*if(ad_data=0xe6)
xshu=0x00;
*/
buzzer=1;
if((ad_data-0x06)>=0xff){
digit[1]=0x00;
digit[2]=0x00;
digit[3]=0x00;
}
if(ad_data>=0x7f){
for(a=0;a<5;a++){
buzzer=0;
longdelay(250);
buzzer=1;
longdelay(150);
}
}
digit[2]=digit[2]+0x80;
//while(a--){
write7279(0x84,digit[0]);
short_delay();
write7279(0x85,digit[1]);
short_delay();
write7279(0x86,digit[2]);
short_delay();
write7279(0x87,digit[3]);
short_delay();
//}
}
//*******語音模塊初始化*****
/*void init_SC(void){
SC_DATA=0;
SC_RST=1;
delay_us(100);
SC_RST=0;
delay_us(100);
sp[0]=0;
sp[1]=0;
sp[2]=0;
}
void SC_Speech(uchar cnt){
uchar i;
SC_RST=1;
delay_us(100);
SC_RST=0;
delay_us(100);
for(i=0;i<cnt;i++){
SC_DATA=1;
delay_us(100);
SC_DATA=0;
delay_us(100);
}
}
void SC_WBusy(void){
uint times;
for(times=0;times<20;times++){
delay_ms(100);
if(SC_BUSY==0)
break;
}
}
//*******控制地址段組合放音******
void SC_Speechs(void){
sp[0]=24;
sp[1]=22;
sp[2]=23;
sp[3]=digit[0]+2;
sp[4]=27;
sp[5]=digit[1]+2;
sp[6]=15;
sp[7]=digit[2]+2;
sp[8]=20;
SC_Speech(sp[0]);
SC_WBusy();
SC_Speech(sp[1]);
SC_WBusy();
SC_Speech(sp[2]);
SC_WBusy();
SC_Speech(sp[3]);
SC_WBusy();
SC_Speech(sp[4]);
SC_WBusy();
SC_Speech(sp[5]);
SC_WBusy();
SC_Speech(sp[6]);
SC_WBusy();
SC_Speech(sp[7]);
SC_WBusy();
SC_Speech(sp[8]);
SC_WBusy();
sp[0]=0;sp[1]=0;sp[2]=0;sp[3]=0;//播放完畢后將各位置于無語音播放的0地址位
sp[4]=0;sp[5]=0;sp[6]=0;sp[7]=0;SC_Speech(sp[8]);
}
*/
void init_7279(){
uchar i;
send_byte(CMD_RESET);
for(i=0;i<8;i++)
write7279(UNDECODE+i,1);
}
void write7279(uchar cmd,uchar dta){
send_byte(cmd);
send_byte(dta);
}
uchar read7279(uchar command){
send_byte(command);
return(receive_byte());
}
void send_byte(uchar out_byte){
uchar i;
cs=0;
long_delay();
for(i=0;i<8;i++){
if(out_byte&0x80)
dat=1;
else
dat=0;
clk=1;
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
}
dat=0;
}
uchar receive_byte(void){
uchar i,in_byte;
dat=1;
long_delay();
for(i=0;i<8;i++){
clk=1;
short_delay();
in_byte=in_byte*2;
if(dat)
in_byte=in_byte|0x01;
clk=0;
short_delay();
}
dat=0;
return(in_byte);
}
void long_delay(void){
uint i;
for(i=0;i<30;i++);
}
void short_delay(void){
uchar i;
for(i=0;i<8;i++);
}
void delay10ms(uchar time){
uchar i;
uint j;
for(i=0;i<time;i++){
for(j=0;j<0x390;j++){
//if(!key)
//ket_int();
}
}
}
void longdelay(uint time){
uint i;
uint j;
for(i=0;i<time;i++){
for(j=0;j<110;j++){
//if(!key)
//ket_int();
}
}
}
復(fù)制代碼
作者:
admin
時(shí)間:
2020-4-27 00:02
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1