51pic单片机初始化程序如何初始化芯片和设置输入输出程序(回答c程序)

51单片机驱动DS12C887的时钟芯片C语言程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
51单片机驱动DS12C887的时钟芯片C语言程序
本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分,已通过测试,详细注释很好用的。
#include & absacc.h &
#include & reg51.h &
#define uchar unsigned char
#define MCA XBYTE [ 0xbf0a ]
/*寄存器A*/
#define MCB XBYTE [ 0xbf0b ]
/* 寄存器B*/
#define MCC XBYTE [ 0xbf0c ]
/* 寄存器C*/
#define MCD XBYTE [ 0xbf0d ]
/*寄存器D */
#define HOURW XBYTE [ 0xbf05 ]
/*时报警*/
#define SECONDW XBYTE [ 0xbf01 ]
/*秒报警*/
#define YEAR XBYTE [ 0xbf09 ]
#define MONTH XBYTE [ 0xbf08 ]
#define DAY XBYTE [ 0xbf07 ]
#define HOUR XBYTE [ 0xbf04 ]
#define MU XBYTE [ 0xbf02 ]
#define SECOND XBYTE [ 0xbf00 ]
sbit uip_bit = ACC^7;
/* 保存更新周期标志位*/
dt[6] = { 0x06,0x01,0x01,0x00,0x00,0x00 };
/* 时标缓冲区及初值 ,设置时间,用于时间校准?*/
sbit bita=P2^0;
sbit bitb=P2^1;
sbit bitc=P2^2;
sbit bitd=P2^3;
code uchar dispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码
uchar dispbit[4]={0,0,0,0};/*显示位*/
/*显示函数*/
void disp()
bita=1;bitb=bitc=bitd=0;
P0=dispcode[dispbit[0]];
for(k=0;k&150;k++);
bita=bitc=bitd=0;bitb=1;
P0=dispcode[dispbit[1]];
for(k=0;k&150;k++);
bita=bitb=bitd=0;bitc=1;
P0=dispcode[dispbit[2]];
for(k=0;k&150;k++);
bita=bitb=bitc=0;bitd=1;
P0=dispcode[dispbit[3]];
for(k=0;k&150;k++);
/* 初始化工作状态函数*/
void initstat ( void )
MCA = 0x2f;
/*选时钟32.768KHz,中断周期500ms*/
ACC = MCC;
/* 清中断请求标志 */
ACC = MCD;
/* VRT = 1,数据有效 */
/* 中断允许,时标十进制,24小时制,芯片开始工作*/
MCB = 0x72;
HOURW = 0x17;*/
/*每小时报警中断*/
SECONDW=0X3b; /*每秒报警中断
, 可以选用,用于显示秒点的闪动*/
/* 开外部中断0*/
/* 写时标函数 */
void wMC ( void )
MCB = 0x80;
/* 置SET位为1,芯片停止工作 */
YEAR=dt[0];
MONTH=dt[1];
DAY=dt[2];
HOUR=dt[3];
SECOND=dt[5];
/* 读时标函数 */
void rMC ( void )
{ ACC = MCA; }
/* 读取UIP位 */
while ( uip_bit );
/* 等待周期更新结束 */
dt[0]=YEAR;
dt[1]=MONTH;
dt[2]=DAY;
dt[3]=HOUR;
dt[5]=SECOND;
/* 读时标值到缓冲区 */
void main ( void )
wMC ( ); /* 调用写时标函数 */
initstat ( ); /* 调用初始化工作状态函数*/
dispbit[0]=dt[3]/16;
dispbit[1]=dt[3]%16;
dispbit[2]=dt[4]/16;
dispbit[3]=dt[4]%16;
/* 外部中断0服务函数*/
void time ( void ) interrupt 0 using 1
ACC = MCC;
/* 读取寄存器C*/
if ( ACC^4 )
/* 周期更新结束,读取时标值*/
if ( ACC^5 )
/* 秒报警*/
SECONDW=0x3b;
HOURW = 0x17; */ /* 每小时报警中断 */
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网 51hei.com , All Rights Reserved用51单片机控制ISD1820语音芯片的原理图及c程序或汇编程序_百度知道
用51单片机控制ISD1820语音芯片的原理图及c程序或汇编程序
我有更好的答案
#include&reg52.h&code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,& && && && && && && && && && &&&0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //显示段码void Delay(unsigned int tc)& &&&//显示延时程序{while( tc != 0 )&{&&&for(i=0; i&100; i++);&&tc--;}}sbit TMDAT =P3^1; //DS18B20的数据输入/输出脚DQ,根据情况设定//测量到的温度的整数部分unsigned char xiaoshu1;//小数第一位unsigned char xiaoshu2;//小数第二位u//两位小数bit&&fg=1;& && &&&//温度正负标志void dmsec (unsigned int count)& && & //延时部分{& &while(count--){for(i=0;i&115;i++);}&}& && && &void tmreset (void)& && & //发送复位{& && && && && && && && && && &&TMDAT=0;& &for(i=0;i&103;i++);& &TMDAT = 1; for(i=0;i&4;i++);& && &&}& && && &bit tmrbit (void)& && & //读一位//{& && && && && && && && && &&&& && &&&&& && &&&TMDAT = 0;&&i++;& && &&&&TMDAT = 1;&&&i++; i++;&&//微量延时& &//&&dat = TMDAT;& &&&for(i=0;i&8;i++);&&&return (dat);& && &}& && && &unsigned char tmrbyte (void)& && &&&//读一个字节&&{& && && && && &&&&&unsigned char i,j,& && &&&dat = 0;& && &&&&for (i=1;i&=8;i++)& && &&&{ j = tmrbit();&&dat = (j && 7) | (dat && 1); }& && && && &return (dat);& &}& && && &void tmwbyte (unsigned char dat)& &&&//写一个字节{& && && && && && && &&&&&unsigned char j,i;& && &&&& && &&&&for (j=1;j&=8;j++)& && &&&{ testb = dat & 0x01;& &&&& &dat = dat && 1;& && && &if (testb)& &&&& &{& &TMDAT = 0;& && && &//写0&&& &&&i++; i++;& && && && && && && && && && && & TMDAT = 1;& &&& & for(i=0;i&8;i++); }& &else& && &&&&{&&TMDAT = 0;& && && &//写0&& &&&for(i=0;i&8;i++);&&&TMDAT = 1;& &&&& &&&i++; i++;}& && && && && && && && && && &&}& && &&&}&&void tmstart (void)& && & //发送ds1820 开始转换&&{&&tmreset();&&//复位& &&&&&dmsec(1);&&//延时& &&&&tmwbyte(0xcc);&&//跳过序列号命令& &&&tmwbyte(0x44);&&//发转换命令 44H,&&}& && && &void tmrtemp (void)& && & //读取温度& & {& && && && && && && && &&&&&unsigned char a,b;&&&tmreset ();&&//复位& &&&&&dmsec (1);&&//延时& &&&&&tmwbyte (0xcc);&&//跳过序列号命令& &&&tmwbyte (0xbe);&&//发送读取命令& &&&&&a = tmrbyte ();&&//读取低位温度& &&&&b = tmrbyte ();& &//读取高位温度& && && &&&&&if(b&0x7f)& && &//最高位为1时温度是负&&{a=~a;& &b=~b+1;& && & //补码转换,取反加一& &fg=0;& && &//读取温度为负时fg=0& && & }&&sdata = a/16+b*16;& && &//整数部分&&xiaoshu1 = (a&0x0f)*10/16; //小数第一位&&xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位&&xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位}&&void DS18B20PRO(void)& && && &{&&tmstart();& && &&&//dmsec(5);&&//如果是不断地读取的话可以不延时 //&&tmrtemp();&&//读取温度,执行完毕温度将存于TMP中 //}& && && &&&void Led(){&& &if(fg==1)& &//温度为正时显示的数据& &{& &P2=P2&0&& & P0=seg7code[sdata/10];& && && &&&//输出十位数& & Delay(8); P2=P2|0xf0; P2=P2&0&&& & P0=seg7code[sdata%10]|0x80; //输出个位和小数点& & Delay(8); P2=P2|0xf0; P2=P2&0&& & P0=seg7code[xiaoshu1];& &//输出小数点后第一位& & Delay(8); P2=P2|0xf0; P2=P2&0x7f;&& & P0=seg7code[xiaoshu2];& && & //输出小数点后第二位& & Delay(4); P2=P2|0xf0;& &}& &if(fg==0)&&//温度为负时显示的数据& &{& &P2=P2&0&& & P0=seg7code[11];& && && &&&//负号& & Delay(8); P2=P2|0xf0; P2=P2&0&&& & P0=seg7code[sdata/10]|0x80; //输出十位数& & Delay(8); P2=P2|0xf0; P2=P2&0&& & P0=seg7code[sdata%10];& &//输出个位和小数点& & Delay(8); P2=P2|0xf0; P2=P2&0x7f;&& & P0=seg7code[xiaoshu1];& && & //输出小数点后第一位& & Delay(4); P2=P2|0xf0;& &}}main(){fg=1;while(1){&&DS18B20PRO();&&Led();}}&
采纳率:81%
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。豆丁微信公众号
君,已阅读到文档的结尾了呢~~
51单片机C语言电子时钟程序设计程序,单片机电子时钟设计,单片机c语言程序,单片机 电子时钟,单片机c语言入门,单片机的c语言,单片机c语言教程,单片机c语言,义隆单片机c语言,c语言与单片机,单片机c语言头文件
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
51单片机C语言电子时钟程序设计程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51单片机有个问题一直不懂,就是STC89C51的程序是怎么烧到芯片里面的? 现在市面上的下载器的原理是什么?_百度知道
51单片机有个问题一直不懂,就是STC89C51的程序是怎么烧到芯片里面的? 现在市面上的下载器的原理是什么?
假如要做一个用USB插在电脑上面的下载器,然后有几根线跟芯片连着?需要哪些东西,是不是只需要RXD和TXD两个根线就行了?过程是怎么样的?USB转串口,串口再转232吗?
我有更好的答案
STC的芯片在上电后首先进入BOOT段程序,如果不需要下载,在等待了很小一段时间后就进入的应用程序段,也就是你写的程序。下载过程是这样的,STC的ISP程序发出一段特殊的字符串(具体数据我忘了),单片机如果这时候正在BOOT段里等待,那它就会应答一串握手数据,这时候单片机和ISP程序就连起来了,之后是下载程序的大小等数据的信息传递。接下来,ISP将需要下载的程序分割成一个一个块传给单片机,单片机一个一个接收并写到FLASH中。当最后一个块结束后,单片机就会重启,如果没有再进入下载过程的话,很小一段时间后就进入的应用程序段。其实,下载的关键是ISP程序,只需要买个USB转串口的通用工具就可以了,不需要自制。另外,俗称的串口就是232。
采纳率:71%
单片机有串口,就是使用串口下载的,除你说的那两个脚 ,还需要 电源脚,至于过程,不是这里可以说清楚的,大概就是烧录软件引导单片机进入烧录模式,然后就开始烧写程序了,还有校验什么的,如果全都没错的话,烧写就完成了现在有很多USB转串口的芯片,可以不用232,但是,用USB转串口的不太稳定,出错的机率比较大,最好还是用原生的串口好一点,现在电脑大部分都没有引出串口了,如果想用原生的串口,可以自己打开主机机箱引出来
那AVR单片机串口下载程序的话是不是也只需要3个脚?
不止三个,电源脚是两个啊。AVR用串口下载的话,要事先把bootloader烧写进去才行的,AVR可以用ISP下载
USB-TTL只要四个脚VCC,GND,TXD,RXD.下载时有些讲究,RXD与TXD要交换。
原理我也不清楚,我看了开发板的pcb,从串口到单片机中间有个芯片max232,然后再接到单片机的RXD,TXD上的
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&>&51单片机ILI9325触摸彩屏显示C程序
51单片机ILI9325触摸彩屏显示C程序
上传大小:123KB
51单片机控制ILI9325芯片的触摸彩屏显示C程序
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有13条
资料很好,已经驱动了,屏点亮了
真的可以用,而且代码搬到stm32上也可以用
不错的资料,初始化部分还能用,其它的仅供参考,
zhangjikuan
综合评分:
积分/C币:3
zhangjikuan
综合评分:
积分/C币:5
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
51单片机ILI9325触摸彩屏显示C程序
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
tangxuewen1990
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
51单片机ILI9325触摸彩屏显示C程序

我要回帖

更多关于 pic单片机初始化程序 的文章

 

随机推荐