sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit
CLK7219 = P1^5; DIN7219 = P1^4;
// 7219输入时钟 // 7219数据输入帧信号 // 7219数据串行收入
//预置键指示灯
//自动扫描指示灯 //直流输出指示灯 //方波输出指示灯 //三角波输出指示灯
LOAD7219 = P1^6;
LED_PRESET = P0^0; LED_DC_MOD = P0^2; LED_SQU = P0^3; LED_TRI = P0^4; SET = P0^5;
LED_AUTO_SCAN = P0^1;
//预置键
//自动扫描键
//直流输出 //方波输出 //三角波输出
//自动扫描+ //自动扫描—
AUTO_SCAN = P0^6; DC_MOD = P0^7; SQU = P3^0; TRI = P3^1;
SCAN_SPEED = P3^2; //扫描速度控制键 SCAN_A = P3^6; SCAN_S = P3^5;
INCREASE = P3^4; DECREASE = P3^3; NUM_0 = P1^0; NUM_1 = P3^7; NUM_3 = P2^1; NUM_4 = P2^2; NUM_5 = P2^3; NUM_6 = P2^4; NUM_7 = P2^5; NUM_8 = P2^6; NUM_9 = P2^7; ENTER = P1^2;
//旋钮— //旋钮+ //数字1 //数字2 //数字3 //数字4 //数字5 //数字6 //数字7 //数字8 //数字9
//小数点
//数字0
NUM_2 = P2^0;
DECIMAL_POINT = P1^1;
//Enter键
/////////////////////////////////////////////////////////////////////// // 延时
///////////////////////////////////////////////////////////////////////
void Delay(uint nCount) //delay nCount us {
27
while(nCount--); }
void SetDAC0(int dat) {
uchar low; uchar high;
low = dat & 0xff;
high = (dat >> 8) & 0x0f;
DAC0L = low; DAC0H = high; }
void SetDAC1(int dat) {
uchar low; uchar high;
low = dat & 0xff;
high = (dat >> 8) & 0x0f;
DAC1L = low; DAC1H = high; }
/////////////////////////////////////////////////////////////////////// // 7219操作程序
/////////////////////////////////////////////////////////////////////// void Send7219(uchar add, uchar dat) {
uchar ADS, j;
LOAD7219 = 0; CLK7219 = 0;
ADS = add;
for(j = 0; j < 8; ++j) // send address {
DIN7219 = ADS & 0x80;
28
ADS <<= 1; CLK7219 = 0; CLK7219 = 1; }
ADS = dat;
for(j = 0; j < 8; ++j) // send data {
DIN7219 = ADS & 0x80; ADS <<= 1; CLK7219 = 0; CLK7219 = 1; }
CLK7219 = 0; LOAD7219 = 1; }
/////////////////////////////////////////////////////////////////////// // 4位数码管显示
/////////////////////////////////////////////////////////////////////// void DisplayLed(void) {
Send7219(0x01, DisBuf[0]); Send7219(0x02, DisBuf[1]); Send7219(0x03, DisBuf[2]); Send7219(0x04, DisBuf[3]); }
/////////////////////////////////////////////////////////////////////// // 定时器0中断
/////////////////////////////////////////////////////////////////////// void Timer0IntServe(void) interrupt 1 {
int vol; EA = 0; TR0 = 0; TL0 = 0xAF; TH0 = 0x3C; scan_counter++;
29
if(up==1) {
if(scan_counter==5) { scan_counter=0; if(i<99) { g_code=code_tab[i++]; SetDAC0(g_code); vol=g_code*0.02483; DisBuf[2]=Tab[vol/10]| 0x80; DisBuf[3]=Tab[vol]; } else g_code=code_tab[i]; SetDAC0(g_code); vol=g_code*0.02483; DisBuf[2]=Tab[vol/10]| 0x80; DisBuf[3]=Tab[vol]; } }
if(down==1) {
if(scan_counter==5) { scan_counter=0; if(i>0) { g_code=code_tab[i--]; SetDAC0(g_code); vol=g_code*0.02483; DisBuf[2]=Tab[vol/10]| 0x80; DisBuf[3]=Tab[vol]; } else g_code=code_tab[i]; SetDAC0(g_code); vol=g_code*0.02483; DisBuf[2]=Tab[vol/10]| 0x80;
30
DisBuf[3]=Tab[vol]; } } TR0=1; EA=1; }
/////////////////////////////////////////////////////////////////////// // 定时器1中断
/////////////////////////////////////////////////////////////////////// char squareLevel = 0;
void Timer1IntServe(void) interrupt 3 {
EA=0; TR1 = 0; TL1 = 0x18; TH1 = 0xFC; TR1 = 1;
if(squareLevel == 0) {
squareLevel = 1; DAC0L=0x00; DAC0H=0x00; }
else //(squareLevel == 1) {
squareLevel = 0; DAC0L=0xFF; DAC0H=0xFF; }
EA=1; }
/////////////////////////////////////////////////////////////////////// // ADC0转换结束中断
/////////////////////////////////////////////////////////////////////// void ADCIntServe() interrupt 15 {
31