資源簡介
ds12c887+的匯編程序與C語言應用程序(借鑒)
基于tx-1c開發板

代碼片段和文件信息
#include
#include
void?delay(uint?z)//延時函數
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void?di()?//蜂鳴器報警聲音
{
beep=0;
delay(100);
beep=1;
}
void?write_com(uchar?com)
{//寫液晶命令函數
rs=0;
lcden=0;
P0=com;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void?write_date(uchar?date)
{//寫液晶數據函數
rs=1;
lcden=0;
P0=date;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void?init()
{//初始化函數
uchar?num;
EA=1;//打開總中斷
EX1=1;//開外部中斷1
IT1=1;//設置負跳變沿觸發中斷
flag1=0;//變量初始化
t0_num=0;
s1num=0;
week=1;
dula=0;//關閉數碼管顯示
wela=0;
lcden=0;
rd=0;
/*以下幾行在首次設置DS12C887時使用,以后不必再寫入
write_ds(0x0A0x20);//打開振蕩器
write_ds(0x0B0x26);//設置24小時模式,數據二進制格式
//開啟鬧鈴中斷
set_time();//設置上電默認時間
-----------------------------------------------------*/
write_com(0x38);//1602液晶初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)//寫入液晶固定部分顯示
{
write_date(table[num]);
delay(1);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_date(table1[num]);
delay(1);
}
}
void?write_sfm(uchar?addchar?date)
{//1602液晶刷新時分秒函數4為時,7為分,10為秒
char?shige;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void?write_nyr(uchar?addchar?date)
{//1602液晶刷新年月日函數3為年,6為分,9為秒
char?shige;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void?write_week(char?we)
{//寫液晶星期顯示函數
write_com(0x80+12);
switch(we)
{
case?1: write_date(‘M‘);delay(5);
write_date(‘O‘);delay(5);
write_date(‘N‘);
break;
case?2: write_date(‘T‘);delay(5);
write_date(‘U‘);delay(5);
write_date(‘E‘);
break;
case?3: write_date(‘W‘);delay(5);
write_date(‘E‘);delay(5);
write_date(‘D‘);
break;
case?4: write_date(‘T‘);delay(5);
write_date(‘H‘);delay(5);
write_date(‘U‘);
break;
case?5: write_date(‘F‘);delay(5);
write_date(‘R‘);delay(5);
write_date(‘I‘);
break;
case?6: write_date(‘S‘);delay(5);
write_date(‘A‘);delay(5);
write_date(‘T‘);
break;
case?7: write_date(‘S‘);delay(5);
write_date(‘U‘);delay(5);
write_date(‘N‘);
break;
}
}
void?keyscan()
{
if(flag_ri==1)
{//這里用來取消鬧鐘報警,任一鍵取消報警
if((s1==0)||(s2==0)||(s3==0)||(s4==0))
{
delay(5);
if((s1==0)||(s2==0)||(s3==0)||(s4==0))
{
while(!(s1&&s2&&s3&&s4));
????????????????di();
flag_ri=0;//清除報警標志
} ?
}
}
if(s1==0)//檢測S1
{
delay(5);
if(s1==0)
{
s1num++;//記錄按下次數
if(flag1==1)
if(s1num==4)
s1num=1;
flag=1;
while(!s1);di();
switch(s1num)
{//光標閃爍點定位
case?1:?write_com(0x80+0x40+10);
????write_com(0x0f);
break;
case?2:?write_com(0x80+0x40+7);
break;
case?3:?write_com(0x80+0x40+4);
break;
case?4:?write_com(0x80+12);
break;
case?5:?write_com(0x80
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????48640??2009-09-19?09:27??ds12c887+的匯編程序與C語言應用程序.doc
?????文件????????8084??2009-12-24?16:21??shizhong.c
- 上一篇:編譯原理實驗 LL1文法分析 first集合 follow集合
- 下一篇:預測分析表
評論
共有 條評論