|
1黑幣
#include<reg51.h>
#define uchar unsigned char
//地址定義
#define adr_bit_1 0x01 //顯示數(shù)據(jù)1的寄存器地址
#define adr_bit_2 0x02 //顯示數(shù)據(jù)2的寄存器地址
#define adr_bit_3 0x03 //顯示數(shù)據(jù)3的寄存器地址
#define adr_bit_4 0x04 //顯示數(shù)據(jù)4的寄存器地址
#define adr_bitrans_mode 0x09 //譯碼方式寄存器的地址
#define adr_light_con 0x0a //亮度寄存器
#define adr_scan_count 0x0b //掃描界線寄存器
#define adr_close 0x0c //掉電控制寄存器
#define adr_glint_con 0x0d //閃爍控制寄存器
#define adr_show_test 0x0f //顯示測試寄存器
//管腳定義
sbit jia=P1^0;
sbit jian=P1^1;
sbit max7219_pin_LOAD=P2^0;
sbit max7219_pin_CLK=P2^1;
sbit max7219_pin_DIN=P2^2;
sbit max7219_pin_RST=P2^3;
//函數(shù)聲明
void shuchu(unsigned char B ); //顯示輸出和電壓調(diào)節(jié)
void chaoshi_2s(); //超時(shí)2s判斷子程序
void xd_delay();
void max7219_reset(); //復(fù)位
void max7219_init(); //初始化控制寄存器
void max7219_echo(unsigned char bw,sw,gw,dw); //數(shù)據(jù)寄存器
void max7219_send_data(unsigned char addr,da); //完成一次寄存器的寫操作
void max7219_delay(void);
//uchar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
char timer=0;
uchar bw=0,sw=0,gw=5,dw=0;
uchar B;
//初始化
B=50;
P0=B;
max7219_reset(); //復(fù)位
max7219_init(); //初始化控制寄存器
max7219_echo(uchar bw,sw,gw,dw); //數(shù)據(jù)寄存器顯示
max7219_send_data(uchar addr,da); //完成一次寄存器的寫操作
chaxun: if(P1==0xff) //判斷是是否有鍵按下
{
xd_delay();
goto chaxun;
}
else
{
if(jia==0) //判斷是否按下+鍵
{
if(P0==0xff) //輸出已為最大值
goto chaxun;
else //未達(dá)最大值
{
chaoshi_2s(); //返回一個 timer判斷
if(timer==32) //是否超過按鍵超過2s
{
chang_jia: v++;
shuchujia_0.1v(char B);
if(P0==0xff) //輸出已為最大值
goto chaxun;
else //未達(dá)最大值
{ if(jia==0) //判斷是否按下+鍵
{ //xd_delay();
goto chang_jia;
}
else
goto chaxun;
}
}
else
{ v++;
shuchujia_0.1v(uchar B);
goto chaxun;
}
}
}
if(jian==0) //按下—鍵
{ if(P0==0) //輸出已為最小值
goto chaxun;
else //已達(dá)最小值
{ chaoshi_2s(); //返回一個判斷值timer
if(timer==32) //是否超過按鍵超過2s
{ chang_jian: v--;
shuchujian_0.1v(uchar B);
if(P0==0) //輸出已為最小值
goto chaxun;
else //未達(dá)最小值
{ if(jian==0) //判斷按下是-鍵
{ //xd_delay();
goto chang_jian;
}
else
goto chaxun;
}
}
else
{
v--;
shuchujian_0.1v(uchar B)
goto chaxun;
}
}
}
}
}
void shuchu(uchar B) //修改顯示數(shù)值及電壓輸出
{ //輸出電壓改變
P0=B;
//顯示改變
bw=B/1000;
sw=B%1000/100;
gw=B%1000%100/10+0x80;
dw=B%10;
/*bw=a[bw];sw=a[sw];gw=a[gw]+0x80; dw=a[dw];*/
max7219_echo(unsigned char bw,sw,gw,dw); //數(shù)據(jù)寄存器顯示
max7219_send_data(unsigned char addr,da); //完成一次寄存器的寫操作
}
void chaoshi_2s() //查詢超2s子程序
{ TMOD=0x01;
TH0=0xff;
TL0=0xff;
TR0=1;
while(jia==0||jian==0)
{ while(!TF0); //定時(shí)一次未到空等待
timer++;
TH0=0xff; //重新裝入數(shù)值
TL0=0xff;
if(timer==32)
break;
}
}
//延時(shí)消抖
void xd_delay()
{ uchar i;
for(i=0;i<2000;i++);
}
///完成max7219的復(fù)位
void max7219_reset()
{ uchar i
max7219_pin_RST=0;
for(i=0;i<125;i++)
max7219_delay();
max7219_pin_RST=1;
for(i=0;i<125;i++)
max7219_delay();
max7219_pin_RST=0;
for(i=0;i<125;i++)
max7219_delay();
}
//通過寫控制寄存器,完成max7219的初始化
void max7219_init()
{ max7219_reset();
max7219_send_data(addr_scan_count,0x04);
max7219_send_data(addr_light_con,0x80);
max7219_send_data(addr_trans_mode,0xff);
max7219_send_data(addr_close,0x01);
}
//入口參數(shù) bw,sw,gw,dw
//送8位顯示數(shù)據(jù)到顯示寄存器
void max7219_echo(unsigned char bw,sw,gw,dw)
{ max7219_send_data(addr_bit_1,bw);
max7219_send_data(addr_bit_2,sw);
max7219_send_data(addr_bit_3,gw);
max7219_send_data(addr_bit_4,dw);
}
//入口地址:addr寄存器地址,da寄存器設(shè)置值
//把設(shè)置值寫入對應(yīng)的寄存器中
void max7219_send_data(unsigned char addr,da)
{ uchar i,byte_out;
byte_out=adr;
mwx7219_pin_DIN=1;
mwx7219_pin_CLK=1;
mwx7219_pin_LOAD=0;
for(i=1;i<8;i++)
{ mwx7219_pin_CLK=1;
mwx7219_pin_DIN=(bit)(byte_out&0x80);
byte_out=byte_out<<1;
mwx7219_CLK=0;
max7219_delay();
}
mwx7219_pin_CLK=1;
byte_out=da;
for(i=0;i<7;i++)
{ mwx7219_pin_CLK=1;
mwx7219_pin_DIN=(bit)(byte_out&0x80)
byte_out=byte_out<<1;
mwx7219_CLK=0;
max7219_delay();
}
mwx7219_pin_CLK=1;
mwx7219_pin_LOAD=1;
mwx7219_pin_DIN=(bit)(byte_out&0x80);
mwx7219_pin_CLK=0;
max7219_delay();
max7219_pin_CLK=1;
}
//延時(shí)
void max7219_delay(void)
{ uchar i;
for(i=0;i<125;i++)
{
}
}
總是在第46行 max7219_echo(unsigned char bw,sw,gw,dw);附近顯示語法錯誤,但是我又沒檢查出錯誤出處,求指點(diǎn)
|
|