合肥学院第六届电子设计竞赛
图五:系统原理图
图六:系统硬件电路图
- 11 -
合肥学院第六届电子设计竞赛
合肥学院第六届电子设计竞赛
附录2 部分程序清单
#include
#define uchar unsigned char #define uint unsigned int uchar
miao,fen,shi,ri,zhou,yue,nian,time_flag,caidan_flag,time0ryuzhi_flag,timekey_num,yuzhikey_num,shuma24s_flag,shumayuzhi_flag,dp=0,tt=0,yuzhitime_flag;
uchar yuzhitimekey_num,aa,bb,Ttime1,flagbb,flag_beep,Tbeep; char zhen=24,Tg,Tb,Ttime; sbit DS_cs = P2^0; sbit DS_as = P2^1; sbit DS_rw = P3^6; sbit DS_ds = P3^7; sbit LCD_rs = P2^2; sbit LCD_en = P2^4; sbit key1 = P2^5; sbit key2 = P2^6; sbit key3 = P2^7; sbit key4 = P3^5; sbit duan = P3^0; sbit wei = P3^1; sbit beep = P3^4; sbit led = P2^3;
uchar code table1[]={%uchar code table2[]={%uchar code table3[]={%uchar code table4[]={%uchar code table5[]={%uchar code table6[]={\
uchar shuma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void init_dis(uchar add,uchar table[]); void delay(uchar z) //延时函数 { }
void DS_write(uchar add,uchar date) //向DS12887芯片中的寄存器中写数据函数 {
}
uchar DS_read(uchar add) //从DS12887芯片中读取数据函数
- 12 -
合肥学院第六届电子设计竞赛
合肥学院第六届电子设计竞赛
{
}
void LCD_write_com(uchar com) //1602写命令函数 { }
void LCD_write_data(uchar date) //1602写数据函数 { }
void Display_Btime(uchar add,uchar date) //在1602中指定位置显示单个数据函数 {
}
void Display_BCDtime(uchar add,uchar date) //在1602中指定位置显示时间函数 { }
void Display_yuzhitime(uchar add,uchar date) //在1602中指定位置显示预置的数据函数 { } void BCD_time() //从DS12887芯片中读取数据并且在1602中显示 {
}
void disp24s() //在数码管上显示24S的函数 { }
void dispyuzhi() //在数码管上显示预置的时间函数 { }
- 13 -
合肥学院第六届电子设计竞赛
合肥学院第六届电子设计竞赛
void caidan_keyscan() //菜单键盘扫描函数 { }
void shizhong_keyscan() //时钟时间键盘扫描函数 用来调整时间 { } void yuzhi_keyscan() //在预置菜单中通过按键执行24S内置函数或手动预置函数 { } void yuzhitime_keyscan() //键盘扫描函数 用来手动预置定时时间,定时显示间隔以及报警持续时间 { }
void init_dis(uchar add,uchar table[]) //在1602中显示特定的字符串函数 { } void set_time() //第一次使用DS12887芯片时用软件方法设定时间的函数 { }
void init() //初始化函数 { }
void main() //主函数 通过在主循环中判断不同按键的按下执行不同的功能 {
init(); while(1) {
caidan_keyscan();
- 14 -
合肥学院第六届电子设计竞赛
合肥学院第六届电子设计竞赛
if(caidan_flag==0) {
shizhong_keyscan(); if(time_flag==0) {
BCD_time(); } }
if(caidan_flag==1) {
if(yuzhitime_flag==0) {
yuzhi_keyscan(); }
if(yuzhitime_flag==1) {
yuzhitime_keyscan(); }
if(shuma24s_flag==1) {
disp24s(); }
if(shumayuzhi_flag==1) {
dispyuzhi(); } } } }
void time() interrupt 1 来执行不同的功能 { }
//定时器中断函数 通过标志变量
- 15 -
合肥学院第六届电子设计竞赛