?? main.c
字號:
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責任公司
* All rights reserved.
*
* 文件名稱: Main.C
* 文件標識: none
* 適用器件: C8051F020
*
* 摘 要: 本文件是DAC演示程序,按鍵有效后DAC0、1輸出鍵值對應波形,并在Lcd做簡單示意
*
* 當前版本:1.1
* 作 者:劉大偉
* 完成日期:2007年3月7日
*************************************************************************************/
/*******************************引用外部頭文件***************************************/
#include "main.h"
/************************************************************************************/
/*************************************************************************************
* 常量及全局變量定義
*************************************************************************************/
unsigned char data sf0,sf1; //分別是DAC0、DAC1的輸出數據在數組中的位號
unsigned int xdata TABLE[256]; //DAC輸出數據
unsigned char ppp[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*************************************************************************************
* 主循環程序
*************************************************************************************/
void main (void)
{
unsigned char key,i,Hf_Flag,L_Count/*用于人工繪制上升下降沿的高低極值計數變量*/;
unsigned int line;
bit Cir_Flag/*進入顯示的顯示標志位*/,H_Flag,L_Flag/*用于人工繪制上升下降沿的高、低標志位*/;
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init();
PORT_Init();
Key_Init();
#if LCDA
LCDA_Init(128,240,FS8x8);
#elif LCDB
LCDB_Init(240,320);
#elif LCDC
LCDC_Init(); // LCD初始化
LCDC_DisFull(Full); // 滿屏
LCDC_DisFull(Clr); // 清屏
#endif
dis_start0();
Uart0_Init(BaudRate_115200);
Uart1_Init(BaudRate_115200);
Uart0_Enable(1);
Uart1_Enable(1);
Uart0_SendString("www.mlarm.com\r\n");
Uart1_SendString("www.mlarm.com\r\n");
Uart0_SendString("TeL:029-88223597-802\r\n");
Uart1_SendString("TeL:029-88223597-802\r\n");
EA = 0;
DAC0_Init();
DAC1_Init();
none();
Timer2_Init(0x4754);// 初始化T2調整DAC0更新速率
Timer3_Init(0x4754);// 初始化T3調整DAC0更新速率
EA = 1;
Cir_Flag=0;
Hf_Flag=0;
line=0;
while(1)
{
key=GetKey(); //調用鍵盤掃描函數,返回的鍵值送變量key
if(key!=0xFF)
{
Alarm(1); //響鈴
Delay_ms(50);
Alarm(0); //關閉鈴聲
switch (key)
{
case 0x0a://a
Cir_Flag=1; //顯示狀態有效
line=0;
//顯示波形顯示界面
#if LCDA
LCDA_ClearScreen();
LCDA_DrawLine(110, 15, 0, 15, 1);
LCDA_DrawLine(110, 15, 110, 239, 1);
for(i=0;i<28;i++)
{
LCDA_DrawPixel(111, 15+8*i, 1);
if(i%2==0)
LCDA_DrawPixel(112, 15+8*i, 1);
}
for(i=0;i<14;i++)
{
LCDA_DrawPixel(6+8*i, 14, 1);
if(i%2==1)
LCDA_DrawPixel(6+8*i, 13, 1);
}
#elif LCDB
LCDB_ClearScreen();
LCDB_DrawLine(180, 15, 1, 15, 1);
LCDB_DrawLine(180, 15, 180, 319, 1);
for(i=0;i<38;i++)
{
LCDB_DrawPixel(181, 15+8*i, 1);
if(i%2==0)
LCDB_DrawPixel(182, 15+8*i, 1);
}
for(i=0;i<23;i++)
{
LCDB_DrawPixel(4+8*i, 14, 1);
if(i%2==1)
LCDB_DrawPixel(4+8*i, 13, 1);
}
#elif LCDC
LCDC_DisFull(Clr); //清屏
for(i=0;i<6;i++)
{
LCDC_DrawByte(15,8*i,0xff);
LCDC_DrawByte(14,8*i,0x01);
if(i%2==1)
LCDC_DrawByte(13,8*i,0x01);
}
LCDC_DispWord(5,22,WLib_0_5x8,1,5,1);
for(i=16;i<128;i++)
{
LCDC_DrawByte(i,48,0x01);
if(i%8==7)
LCDC_DrawByte(i,48,0x03);
if(i%16==15)
LCDC_DrawByte(i,48,0x07);
}
LCDC_DispWord(8,4,WLib_W_10x8,1,10,1);
LCDC_DispWord(19,4,WLib_W_10x8,1,10,1);
LCDC_DispWord(30,4,WLib_W_10x8,1,10,1);
LCDC_DispWord(41,4,WLib_dot_4x8,1,4,1);
LCDC_DispWord(46,4,WLib_M_9x8,1,9,1);
LCDC_DispWord(57,4,WLib_L_6x8,1,6,1);
LCDC_DispWord(63,4,WLib_A_7x8,1,7,1);
LCDC_DispWord(71,4,WLib_R_7x8,1,7,1);
LCDC_DispWord(79,4,WLib_M_9x8,1,9,1);
LCDC_DispWord(90,4,WLib_dot_4x8,1,4,1);
LCDC_DispWord(94,4,WLib_C_7x8,1,7,1);
LCDC_DispWord(102,4,WLib_O_7x8,1,7,1);
LCDC_DispWord(110,4,WLib_M_9x8,1,9,1);
#endif
while(Cir_Flag)
{
if(Dis_Flag==1)
{
Dis_Flag=0;
#if LCDA
if(line>223)
{
line=0;
if(Hf_Flag>0)
#elif LCDB
if(line>303)
{
line=0;
if(Hf_Flag>0)
#elif LCDC
if(line>112)
{
line=0;
if(Hf_Flag>6)
#endif
Hf_Flag=0;
else
Hf_Flag++;
}
else
line++;
#if LCDA
if(line%2==0)
#elif LCDB
if(line%1==0) //沒有意義,防止編譯警告
#elif LCDC
if(line%8==0)
#endif
{
if(L_Count>0x05) //正常顯示
{
L_Count=0x05;
H_Flag=0;
L_Flag=0;
if(Dis_dt/100>37)
{
H_Flag=1;
L_Count=0x00;
}
if(Dis_dt/100<3)
{
L_Flag=1;
L_Count=0x00;
}
//繪圖前擦除掉原來的圖形并繪制新圖形
#if LCDA
LCDA_DrawLine( 0, line/2+16+(112*Hf_Flag), 109, line/2+16+(112*Hf_Flag), 0);
LCDA_DrawPixel( (109-Dis_dt/50), line/2+16+(112*Hf_Flag), 1);
#elif LCDB
LCDB_DrawLine( 1, line+16, 179, line+16, 0);
LCDB_DrawPixel( (179-Dis_dt/50), line+16, 1);
#elif LCDC
LCDC_DrawByte(line/8+16+(14*Hf_Flag),0,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),8,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),16,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),24,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),32,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),40,0x00);
//Delay_ms(5);
LCDC_DrawByte
(line/8+16+(14*Hf_Flag),
((40-Dis_dt/100)/8)*8,
ppp[((40-Dis_dt/100)%8)]);
#endif
}
else //有高低計值出現的顯示
{
if(Dis_dt/100>38)
H_Flag=1;
if(Dis_dt/100<2)
L_Flag=1;
if(H_Flag&L_Flag) //需要人工繪制上升下降沿
{
#if LCDA
for(i=14;i<55;i++)
{
LCDA_DrawPixel( 2*i, line/2+16+(112*Hf_Flag), 1);
}
#elif LCDB
for(i=49;i<89;i++)
{
LCDB_DrawPixel( 2*i, line+16, 1);
}
#elif LCDC
LCDC_DrawByte(line/8+16+(14*Hf_Flag),0,0x55);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),8,0x55);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),16,0x55);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),24,0x55);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),32,0x55);
#endif
H_Flag=0;
L_Flag=0;
L_Count=0x05;
}
else //有高低極值出現的但無需處理正常顯示
{
#if LCDA
LCDA_DrawLine( 0, line/2+16+(112*Hf_Flag), 109, line/2+16+(112*Hf_Flag), 0);
LCDA_DrawPixel( (109-Dis_dt/50), line/2+16+(112*Hf_Flag), 1);
#elif LCDB
LCDB_DrawLine( 0, line+16, 179, line+16, 0);
LCDB_DrawPixel( (179-Dis_dt/50), line+16, 1);
#elif LCDC
LCDC_DrawByte(line/8+16+(14*Hf_Flag),0,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),8,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),16,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),24,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),32,0x00);
LCDC_DrawByte(line/8+16+(14*Hf_Flag),40,0x00);
LCDC_DrawByte
(line/8+16+(14*Hf_Flag),
((40-Dis_dt/100)/8)*8,
ppp[((40-Dis_dt/100)%8)]);
#endif
}
}
L_Count++;
}
}
key=GetKey(); //調用鍵盤掃描函數,返回的鍵值送變量key
if(key!=0xFF)
{
Alarm(1); //響鈴
Delay_ms(50);
Alarm(0); //關閉鈴聲
switch (key)
{
case 0x0b:
EA=0;
sine();
EA=1;
break;
case 0x0c:
EA=0;
saw();
EA=1;
break;
case 0x0d:
EA=0;
triangle();
EA=1;
break;
case 0x0e:
EA=0;
square();
EA=1;
break;
case 0x0f:
EA=0;
Cir_Flag=0;
#if LCDA
LCDA_ClearScreen();
#elif LCDB
LCDB_ClearScreen();
#elif LCDC
LCDC_DisFull(Clr);
#endif
dis_start0();
none();
EA=1;
break;
default:
break;
}
}
}
break;
case 0x0f:
#if LCDA
LCDA_ClearScreen();
#elif LCDB
LCDB_ClearScreen();
#elif LCDC
LCDC_DisFull(Clr);
#endif
dis_start0();
break;
default:
break;
}
Delay_ms(5);
}
}
}
/************************************************************************************
* 文件結束
************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -