欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
超牛仿真LCD顯示
[打印本頁]
作者:
還有誰?
時間:
2020-3-23 16:37
標題:
超牛仿真LCD顯示
00001.jpg
(79.29 KB, 下載次數: 57)
下載附件
2020-3-23 16:36 上傳
仿真LCD顯示
#include <reg52.h>
#include <stdio.h>
// 管腳定義
sbit COM0=P3^5;
sbit COM1=P3^4;
sbit COM2=P3^3;
sbit COM3=P3^2;
sbit BI_4=P3^7;
sbit RTC_CLK=P3^0;
sbit RTC_IO=P3^1;
sbit RTC_RST=P3^7; // 復用
//P3 口模式寄存器
sfr P3M1=0xb1;
sfr P3M0=0xb2;
seg_code[10] = { ~0x03,~0x9f,~0x25,~0x0d,~0x99,~0x49,~0x41,~0x1f,~0x01,~0x09 };
unsigned char ScanCoun=0; // 動態掃描顯示位數計數器
unsigned char DisplayBuf[4] = { 1,2,3,4 }; //4 位數字對應的顯示暫存
// 段碼緩沖區
unsigned char SegBuf[4] = { 0x00,0x00,0x00,0x00 };//COM1 、COM2、COM3、COM4的段碼
bit bi_4a=0; //COM0 對應的4a
bit bi_4b=0; //COM1 對應的4a
bit bi_4c=0; //COM2 對應的4a
// 延時
void dly(unsigned char x)
{
unsigned char i;
for (i=0; i<x; i++);
}
void rtc_wr_time(unsigned char *p_wt_time)
{
unsigned char i;
unsigned char tmp1;
dly(30);
RTC_RST=1;
rtc_wt_byte(0xbe); //burst 寫入時間
for (i=0; i<8; i++)
{
tmp1=*p_wt_time++;
rtc_wt_byte(tmp1);
}
RTC_CLK=0;
RTC_RST=0;
}
void rtc_rd_time(unsigned char *p_rd_time)
{
unsigned char i;
unsigned char tmp1;
dly(30);
RTC_RST=1;
rtc_wt_byte(0xbf); //burst 讀取時間
RTC_IO=1;
for (i=0; i<8; i++)
{
tmp1=rtc_rd_byte();
*p_rd_time++=tmp1;
}
RTC_CLK=0;
RTC_RST=0;
}
void ini_rtc()
{
RTC_CLK=0;
RTC_RST=0;
dly(30);
RTC_RST=1;
rtc_wt_byte(0x8e); // 寫CONTROL 寄存器
rtc_wt_byte(0x00); // 值: 去掉寫保護
RTC_RST=0; // 復位
RTC_RST=1; // 正常工作
rtc_wt_byte(0x90); // 寫TRICKLE CHARGE寄R存器
rtc_wt_byte(0xa9); // 值: 使能充電,串聯2 個二極管,串聯2k 歐姆的電阻
RTC_CLK=0;
RTC_RST=0;
}
// 把4 位數字的SEG放到COM1、COM2、COM3、COM4對應的段碼
//LCD 的管腳定義與LED不同,它不是一個COM對應一位數字,而是對應每個數字的一部分SEG
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// < 1f 1a 2f 2a 3f 3a 4f 4a > -- ----
COM0
// < 1g 1b 2g 2b 2g 3b 4g 4b > -- ----
COM1
// < 1e 1c 2e 2c : 3e 3c 4e 4c > -- ----
COM2
// 1d 1h 2d 2h 3d 3h 4d -- ----
COM3
/**************** 顯示代碼**************/
void Seg2Seg()
{
unsigned char SegXX;
SegBuf[0]=0;
SegBuf[1]=0;
SegBuf[2]=0x08;
SegBuf[3]=0;
bi_4a=0;
bi_4b=0;
bi_4c=0;
SegXX=seg_code[DisplayBuf[0]]; // 第1 位數字
if (SegXX&0x80) SegBuf[0]|=0x40;
if (SegXX&0x40) SegBuf[1]|=0x40;
if (SegXX&0x20) SegBuf[2]|=0x40;
if (SegXX&0x10) SegBuf[3]|=0x80;
if (SegXX&0x08) SegBuf[2]|=0x80;
if (SegXX&0x04) SegBuf[0]|=0x80;
if (SegXX&0x02) SegBuf[1]|=0x80;
if (SegXX&0x01) SegBuf[3]|=0x40;
SegXX=seg_code[DisplayBuf[1]]; // 第2 位數字
if (SegXX&0x80) SegBuf[0]|=0x10;
if (SegXX&0x40) SegBuf[1]|=0x10;
if (SegXX&0x20) SegBuf[2]|=0x10;
if (SegXX&0x10) SegBuf[3]|=0x20;
if (SegXX&0x08) SegBuf[2]|=0x20;
if (SegXX&0x04) SegBuf[0]|=0x20;
if (SegXX&0x02) SegBuf[1]|=0x20;
if (SegXX&0x01) SegBuf[3]|=0x10;
SegXX=seg_code[DisplayBuf[2]]; // 第3 位數字
if (SegXX&0x80) SegBuf[0]|=0x02;
if (SegXX&0x40) SegBuf[1]|=0x02;
if (SegXX&0x20) SegBuf[2]|=0x02;
if (SegXX&0x10) SegBuf[3]|=0x04;
if (SegXX&0x08) SegBuf[2]|=0x04;
if (SegXX&0x04) SegBuf[0]|=0x04;
if (SegXX&0x02) SegBuf[1]|=0x04;
if (SegXX&0x01) SegBuf[3]|=0x02;
SegXX=seg_code[DisplayBuf[3]]; // 第4 位數字
if (SegXX&0x80) bi_4a=1;
if (SegXX&0x40) bi_4b=1;
if (SegXX&0x20) bi_4c=1;
if (SegXX&0x10) SegBuf[3]|=0x01;
if (SegXX&0x08) SegBuf[2]|=0x01;
if (SegXX&0x04) SegBuf[0]|=0x01;
if (SegXX&0x02) SegBuf[1]|=0x01;
}
/* 一個BCD碼轉化成兩個十進制數(如: 0x79 轉化成0x07 和0x09)*/
BcdToDec(unsigned char BcdValue,unsigned char *pDecValue)
{
//if (BcdValue>=0x9a||(BcdValue&0x0f)>=0x0a) return 0;
*pDecValue++=(BcdValue&0xf0)>>4;
*pDecValue=BcdValue&0x0f;
//return 1;
}
/**************** 初始化MCS51內部資源 ********************/
InitInterResource()
{
IE=0; // 關全部中斷
TCON=0; // 清全部中斷請求
IP=0; // 清中斷優先級
TMOD=0x01; //T0 工作方式1(16 位定時器)
TH0=0x00; //T0 定時器輔初值
TL0=0x00;
TR0=1; // 允許T0 定時
ET0=1; // 允許T0 中斷
EA=0; // 關全局中斷
RTC_RST=0;
}
void main()
{
InitInterResource();
ini_rtc(); // 初始化DS1302
rtc_wr_time(ClockBuffer); // 寫入時間初始值
EA=1; // 開全局中斷
while(1)
{
}
}
/*************** 開定時中斷 *************/
//定時器0 中斷服務程序, 5ms定時器, 4 位數碼管動態顯示驅動
void tmr0_p(void) interrupt 1
{
TL0=0x78; // 重新定時5ms
TH0=0xec;
Seg2Seg();
P3M1=0x3c;
P3M0=0x00;
switch(ScanCoun) // 動態掃描顯示
{
case 0: //COM0 正向驅動
P1= SegBuf[0];
BI_4= bi_4a;
COM0=0;
P3M1=0x1c; // 除COM0輸出外,其余COM設為輸入
P3M0=0x00;
break;
case 1: //COM0 反向驅動
P1= ~SegBuf[0];
BI_4= ~bi_4a;
COM0=1;
P3M1=0x1c;
P3M0=0x00;
break;
case 2: //COM1 正向驅動
P1= SegBuf[1];
BI_4= bi_4b;
COM1=0;
P3M1=0x2c;
P3M0=0x00;
break;
case 3: //COM1 反向驅動
P1= ~SegBuf[1];
BI_4= ~bi_4b;
COM1=1;
P3M1=0x2c;
P3M0=0x00;
break;
case 4: //COM2 正向驅動
P1= SegBuf[2];
BI_4= bi_4c;
COM2=0;
P3M1=0x34;
P3M0=0x00;
break;
case 5: //COM2 反向驅動
P1= ~SegBuf[2];
BI_4= ~bi_4c;
COM2=1;
P3M1=0x34;
P3M0=0x00;
break;
case 6: //COM3 正向驅動
P1= SegBuf[3];
COM3=0;
P3M1=0x38;
P3M0=0x00;
RTC_RST=0;
rtc_rd_time(ClockBuffer); // 讀時間
BcdToDec(ClockBuffer[0],DisplayBuf+2); // 秒送入顯示緩沖
BcdToDec(ClockBuffer[1],DisplayBuf); // 分送入顯示緩沖
BI_4= ~bi_4c;
break;
case 7: //COM3 反向驅動
P1= ~SegBuf[3];
COM3=1;
P3M1=0x38;
P3M0=0x00;
break;
}
ScanCoun++; // 下一位
if (ScanCoun>7) ScanCoun=0;
}
復制代碼
祥見附件
仿LCD顯示.rar
(22.39 KB, 下載次數: 66)
2020-3-23 16:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
刀刀見紅
時間:
2020-3-26 07:13
超級棒!好東西!頂一個!
作者:
#include51.h
時間:
2020-3-31 09:40
真的很不錯,正要用呢!
作者:
zhengchong60
時間:
2020-3-31 09:52
很好啊,正在找這方面的東東!
作者:
hao18
時間:
2020-9-4 17:00
樓主好好。
附件的《仿LCD顯示.DSN》,由于我沒有安有相應軟件,不能打開。有哪位好心人幫打開轉成PDF呀
作者:
cb474265474265
時間:
2020-9-20 19:31
很好的資料,多謝樓主的分享。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1