单片机(6)

2018-11-21 21:29

第三章 系统软件的设计

sbit KEY4 = P1^3;

unsigned char dispMode = 0; //显示模式 unsigned char modify = 0; //修改模式

unsigned char count = 0; //修改模式下闪烁计数 unsigned char DIS[6];

unsigned char code C_DAT[]={ 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xBF,/*-*/ };

unsigned char code C_BIT[]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};

void Delay(unsigned int t) {

unsigned int a,b; for (a=0; a

22

22

第三章 系统软件的设计

void DS12887_Write(unsigned char addres,unsigned char dat) {

DS_AS = 1; DS_DS = 1; DS_RW = 1; DS_CS = 0; DS_DAT = addres;

DS_AS = 0; //add will be write when AS full down DS_RW = 0; DS_DAT = dat; DS_RW = 1; DS_AS = 1; DS_CS = 1; }

unsigned char DS12887_Read(unsigned char addres) {

unsigned char d; DS_AS = 1; DS_DS = 1; DS_RW = 1; DS_CS = 0; DS_DAT = addres; DS_AS = 0; DS_DS = 0; DS_DAT = 0xFF; d = DS_DAT; DS_DS = 1; DS_AS = 1; DS_CS = 1;

23

23

第三章 系统软件的设计

return d; }

void DS12887_Init(void) {

if (DS12887_Read(DS_Y_S) == 0) {

DS12887_Write(DS_Y_S, 0x20); DS12887_Write(DS_HOR, 0x12); DS12887_Write(DS_R_A, 0x20); DS12887_Write(DS_R_B, 0x02); //BCD } }

void Display(void) {

unsigned char i;

if (dispMode == 0) //显示模式0,时分秒 {

i = DS12887_Read(DS_HOR) & 0x7F; DIS[0] = C_DAT[i >> 4];

DIS[1] = C_DAT[i & 0x0F] & 0x7F; i = DS12887_Read(DS_MIN); DIS[2] = C_DAT[i >> 4];

DIS[3] = C_DAT[i & 0x0F] & 0x7F; i = DS12887_Read(DS_SEC); DIS[4] = C_DAT[i >> 4];

DIS[5] = C_DAT[i & 0x0F] & 0x7F;

if (modify != 0 && count > CNT_M) //修改模式123下闪烁

24

24

第三章 系统软件的设计

25

{

DIS[2 * (modify - 1)] = 0xFF; DIS[2 * (modify - 1) + 1] = 0xFF; }

} else if (dispMode == 1) //显示模式1,年 {

DIS[0] = 0xFF;

i = DS12887_Read(DS_Y_S); 0x0E

DIS[1] = C_DAT[i >> 4]; DIS[2] = C_DAT[i & 0x0F];

i = DS12887_Read(DS_YER); DIS[3] = C_DAT[i >> 4]; DIS[4] = C_DAT[i & 0x0F]; DIS[5] = 0xFF;

if (modify != 0 && count > CNT_M) {

DIS[2 * (modify - 4) + 1] = 0xFF; DIS[2 * (modify - 4) + 2] = 0xFF; }

} else if (dispMode == 2) {

i = DS12887_Read(DS_MON); if (i < 10) DIS[0] = 0xFF; else

DIS[0] = C_DAT[i >> 4];

DIS[1] = C_DAT[i & 0x0F] & 0x7F; i = DS12887_Read(DS_DAY); DIS[2] = C_DAT[i >> 4];

//年高两位,在RAM里 //年低两位 //修改模式45下闪烁 //显示模式2,月日 星期 //月 //显示小数点 //日 2 5

26

第三章 系统软件的设计

DIS[3] = C_DAT[i & 0x0F];

i = DS12887_Read(DS_WEK); //星期 DIS[4] = C_DAT[10]; //用'-'隔开

DIS[5] = C_DAT[(i - 1) & 0x0F]; //1~7,第一天是星期天 if (modify != 0 && count > CNT_M) //修改模式789下闪烁 {

if (modify != 9) //星期修改时,烁

DIS[2 * (modify - 7)] = 0xFF; DIS[2 * (modify - 7) + 1] = 0xFF; } }

for (i=0; i<6; i++) {

SEG_DAT = DIS[i]; SEG_BIT = C_BIT[i]; Delay(1); SEG_BIT = 0xFF; } count++; //用于修改模式下闪烁 if (count > 2 * CNT_M)

count = 0;

}

/*计算当月的天数*/ unsigned char getDay(void) {

unsigned char tYear,tMonth;

-’不闪2 6


单片机(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高岭土回转窑煅烧工艺,日产200-600吨的价格多少钱_ss

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: